无法在angular2中使用SystemJS加载phoenix js库

时间:2016-10-15 11:38:57

标签: angular ecmascript-6 systemjs

我遵循了Angular2快速入门打字稿教程(here)。

现在我正在尝试包含phoenix.js软件包,以便我可以连接到我的Elixir Phoenix频道。

我已将this package中的凤凰添加到我的package.json并安装它。

我在systemjs.config.js中添加了一行代码:

'phoenix': 'node_modules/phoenix/web/static/js/phoenix.js'

我正在尝试将它导入我的Angular2服务(我正在使用ES6并通读this issue):

import { Socket } from 'phoenix';      

我收到错误

app/app.phoenix_channels.service.ts(2,24): error TS2307: Cannot find module 'phoenix'.

我实际上并不是100%确定如何包含和运行SystemJS配置文件。它包含在应用程序之前的HTML中,但是当我编译typescript时,我看不到它被包含或解析。

我已经完成了这个question on Stack但我无法弄清楚如何使用Angular教程提供的框架来加载依赖项。

我尝试将additional_deps添加为systemjs.config.js的密钥,如下所示:

additional_deps: {
  src: 'node_modules/phoenix/priv/static/phoenix.js',
  inject: 'libs'
},

但这似乎不起作用。

如何才能加载此依赖项以便我可以从此库导入?

1 个答案:

答案 0 :(得分:1)

你有JS文件,它用于运行时,但错误是编译错误,因为它正在寻找一个打字稿文件。对于库,使用TypeScript定义文件,但有些库没有TypeScript支持,因此我们需要安装带有类型定义的外部模块。

有些JS项目你可能找不到定义文件,你需要自己编写。或者你可以做你所链接的答案中的海报。只需声明随机any类型变量(不要导入)

declare var Socket: any;

现在您可以使用Socket。但问题在于你没有任何强类型或智能感知。

幸运的是,有人为凤凰写了一个定义文件

npm install --save-dev @types/phoenix

应该让它发挥作用。就运行时而言,您的SystemJS配置看起来应该是好的。