【问题标题】:Cannot load phoenix js library with SystemJS in angular2无法在angular2中使用SystemJS加载phoenix js库
【发布时间】:2017-02-24 19:03:38
【问题描述】:

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

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

我已将 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 中,但是当我编译打字稿时,我看不到它被包含或解析。

我已经完成了这个question on Stack,但我不知道如何使用 Angular 教程提供的框架来加载依赖项。

我尝试将 additional_deps 作为 key 添加到 systemjs.config.js 中,如下所示:

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

但这似乎不起作用。

我怎样才能加载这个依赖项以便我可以从这个库中导入?

【问题讨论】:

    标签: angular ecmascript-6 systemjs


    【解决方案1】:

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

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

    declare var Socket: any;
    

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

    幸好好像有人写了凤凰的定义文件

    npm install --save-dev @types/phoenix
    

    这应该让它工作。就运行时而言,您的 SystemJS 配置看起来应该不错。

    【讨论】:

    • 谢谢!我知道这与运行时/编译时间有关,但无法解决。感谢您如此简洁地指出这一点。
    猜你喜欢
    • 2016-07-07
    • 2016-08-22
    • 2016-12-12
    • 2016-10-21
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    • 2016-10-22
    • 1970-01-01
    相关资源
    最近更新 更多