【发布时间】:2016-01-15 06:28:35
【问题描述】:
在 Node.js / Express / Angular2 / typescript (IDE=Visual Studio) 应用程序的上下文中,我正在尝试将第三方 .js 实用程序(packery)加载到客户端(用于指令) .有人为它做了打字稿定义。 d.ts 文件如下所示:
declare module "packery" {
interface PackeryOptions { stuff... }
class Packery { stuff .... }
export = Packery;
}
我参考这个 d.ts 文件,告诉浏览器 .js 打包脚本在哪里,然后像这样导入模块:
import Packery = require('packery');
这编译没有抱怨。但是,在运行时,浏览器会尝试(并且失败)在 http://localhost/packery 找到“packery”,而不是知道 packery 是一个导入的库。这与我在客户端上所做的其他导入语句形成对比,例如:
import {Http, HTTP_PROVIDERS} from 'angular2/http';
哪个有效 - 据我所知,我为它们提供的唯一两条信息也是 d.ts 文件和 .js 文件的位置,就像 packery 一样。但是,我一定是错过了什么。尝试了许多文件位置和链接的组合,但无法正常工作。如何获得到“packery”的正确链接?
谢谢!
【问题讨论】:
-
正如@Langley 在下面指出的那样 d.ts 文件只是定义文件,它们不包含库本身的任何实际代码。如果您使用有关如何构建应用程序(Webpack/SystemJs/其他)的信息更新您的问题,我们可以提供有关如何加载库的更多帮助
-
谢谢。我知道 d.ts 只是定义。我的问题如下。该语句既可以编译又可以工作: import {Http, HTTP_PROVIDERS} from 'angular2/http';如果您的 IDE 中有 d.ts,并且在 index.html 中有正确的链接。浏览器不会去“localhost/angular2/http”来尝试获取模块,它以某种方式知道它的正确位置。使用 packery,我还引用了 d.ts 和 index.html 中的正确 .js 链接。它可以编译,但在运行时 require 语句会导致来自“localhost/packery”的负载。必须有额外的映射或链接吗?
-
关于加载器我没有弄乱默认的角度东西,我的理解是 systemjs 是默认的(我在 index.html 中加载 system.js)。谢谢!
-
OK 所以你需要在你的系统 js 配置中为你的 .js 库添加一个映射。我现在没有示例,但会尝试挖掘一个
-
@Zyzle - 这似乎是朝着正确方向迈出的一步。如果我将 map: {packery: 'location of packery js' } 添加到 System.config,它不再尝试从服务器加载 packery。但是,它确实抱怨:“无法解析类的所有参数......确保它们都具有有效的类型或注释”。在我看来,如果客户端正在编译我的客户端打字稿,那么除了 packery .js 文件之外,它还想知道 d.ts 文件在哪里。我使用 /// 参考行告诉我的 IDE,但我还需要以某种方式告诉客户端(或 system.js)吗?
标签: javascript node.js angular angular2-directives