Javascript Angular2-客户端需要模块

Javascript Angular2-客户端需要模块,javascript,node.js,angular,angular2-directives,Javascript,Node.js,Angular,Angular2 Directives,在Node.js/Express/Angular2/typescript(IDE=visualstudio)应用程序的上下文中,我试图将第三方.js实用程序(packery)加载到客户端(用于指令)。有人为它定义了打字脚本。d.ts文件如下所示: declare module "packery" { interface PackeryOptions { stuff... } class Packery { stuff .... } export = Packery;

在Node.js/Express/Angular2/typescript(IDE=visualstudio)应用程序的上下文中,我试图将第三方.js实用程序(packery)加载到客户端(用于指令)。有人为它定义了打字脚本。d.ts文件如下所示:

declare module "packery" {
    interface PackeryOptions {  stuff...  }
    class Packery { stuff .... }
    export = Packery;
}
我引用这个d.ts文件,告诉浏览器.js packery脚本的位置,然后导入模块:

import Packery = require('packery');
这是毫无怨言的汇编。但是,在运行时,浏览器会尝试(但失败)在查找“packer”,而不是知道packer是一个导入的库。这与我在客户机上所做的其他导入声明不同,例如:

import {Http, HTTP_PROVIDERS} from 'angular2/http';
这项工作——据我所知,我只提供了两条信息,它们也是一个d.ts文件和.js文件的位置,就像Packey一样。但是,我肯定错过了什么。尝试了许多文件位置和链接的组合,但无法使其工作。我怎样才能得到“派克”的正确链接


谢谢

类型是不是用类型化语言编写的js库的空定义。它们只在IDE提示和其他东西的开发中有用,在你的应用程序中,你仍然会像平常一样使用这个库,在index.html中添加js文件,或者在加载js文件时添加js文件。

我找到了一个解决方法,我想我会发布它,以防对任何人都有帮助,虽然我对原始问题中提出的设置仍有困难,即获取以下类型的语句:

import foo = require('foo')
在客户端运行。这些在服务器上的node.js中对我有用,但在客户端,对于通过脚本标记加载的第三方库,我无法让它工作,即使我将映射项添加到system.js配置文件中,无论我指向的是.js文件还是d.ts文件

无论如何,如果您使用script标记加载库,然后在IDE中在客户端代码的顶部放置一个引用路径,这样做是可行的

/// <reference path="foo.d.ts" />
//
并确保您的d.ts文件不声明模块/名称空间,而是直接导出方法等。这使得IDE可以毫无怨言地编译,客户端代码可以访问第三方库


但是,我不确定这样做是否更可取/最佳实践,或者是否应该以某种方式配置System.js。

正如@Langley在下面指出的,d.ts文件只是定义文件,它们不包含库本身的任何实际代码。如果您更新了关于如何构建应用程序的信息(Webpack/SystemJs/other),我们可以提供更多关于如何加载库的帮助。谢谢。我理解d.T只是定义。我的问题如下。该语句编译并工作:从'angular2/Http'导入{Http,Http_PROVIDERS};如果您的IDE中有d.ts,并且在index.html中有适当的链接。浏览器不会转到“localhost/angular2/http”尝试获取模块,它知道模块的正确位置。对于packery,我还引用了一个d.ts和index.html中正确的.js链接。它可以编译,但在运行时require语句会导致从“localhost/packery”加载。必须有一个额外的映射或链接?关于加载程序,我没有弄乱默认的角度元素,我的理解是systemjs是默认的(我在index.html中加载system.js)。谢谢好的,那么您需要在系统js配置中添加.js库的映射。我现在没有一个例子,但我会努力挖掘一个out@Zyzle-这似乎是朝着正确方向迈出的一步。如果我将map:{packery:'location of packery js'}添加到System.config,它将不再尝试从服务器加载packery。然而,它确实会这样抱怨:“无法解析类的所有参数……请确保它们都具有有效的类型或注释”。在我看来,如果客户端的typescript正在被客户端传输,那么除了packer.js文件之外,它还想知道d.ts文件在哪里。我使用///引用行告诉我的IDE,但我是否也需要以某种方式告诉客户机(或system.js)?