如何在angular2组件中导入npm包?

我试图学习ng2的绳索,而依赖注入系统正在杀死我。

我正在使用ng quickstart:https://github.com/angular/quickstart/blob/master/README.md

我试图将这个软件包导入到应用程序中:https://www.npmjs.com/package/arpad。 我通过npm update安装了软件包,我的package.json依赖关系如下所示:

"dependencies": {
  "angular2": "2.0.0-beta.9",
  "systemjs": "0.19.24",
  "es6-promise": "^3.0.2",
  "es6-shim": "^0.35.0",
  "reflect-metadata": "0.1.2",
  "rxjs": "5.0.0-beta.2",
  "zone.js": "0.5.15",
  "arpad":"^0.1.2" <----- the package i'm trying to import
}

这是软件包如何输出其代码的方式:

module.exports = ELO;

我有一个组件像这样导入模块:

import {ELO} from 'node_modules/arpad/index.js';

这是systemJS在应用程序的index.html中的配置方式:

  <script>
  System.config({
    packages: {        
      app: {
        format: 'register',
        defaultExtension: 'js'
      }
    },
    map:{'arpad':'node_modules/arpad'} <---- here 
  });
  System.import('node_modules/arpad/index.js'); <--- and here for good measure
  System.import('app/main')
        .then(null, console.error.bind(console));
</script>

现在,它看起来很像我在黑暗中拍摄的,而这正是应用程序控制台中的错误消息让我做的。 当我尝试在这个组件中使用模块时:

public elo = ELO;
constructor(){
    this.score = this.elo.expectedScore(200, 1000);
    ---- there is more to the component but this is the part where it breaks
}

我收到以下消息:

"ORIGINAL EXCEPTION: TypeError: this.elo is undefined"

所以更广泛的问题是:

我怎样才能在ng2 quickstart中使用systemJS(或Webpack或Browserify)作为模块加载器来获得给定的npm包(这不是一个角度模块)以便在组件或服务中工作?


我在这里有一些评论:

  • 你应该为你的模块配置SystemJS:

    System.config({
      map:{'arpad':'node_modules/arpad/index.js'}
      packages: {        
        app: {
          format: 'register',
          defaultExtension: 'js'
        }
      }
    });
    
  • 在导入应用程序(导入app/main模块)之前,不需要导入index.js文件(请参阅System.import('node_modules/arpad/index.js'); )。

  • 您需要以这种方式导入您的elo对象:

    import * as Elo from 'arpad';
    
  • 那么你应该可以这样使用你的模块:

    constructor() {
      this.elo = new Elo();
      this.score = this.elo.expectedScore(200, 1000);
    }
    
  • 这是一个plunkr描述这个:https://plnkr.co/edit/K6bx97igIHpcPZqjQkkb?p=preview。

    链接地址: http://www.djcxy.com/p/90771.html

    上一篇: How to import a npm package in an angular2 component?

    下一篇: How to get application version using libgdx/robovm