网站搜索

typescript - Angular2: ng2-file-upload:无法使用 SystemJS 正确加载它


我正在使用 systemJS 来管理我的包,所以我已经将这些行添加到我的 systemjs 配置文件中:

{
  map: { 'ng2-file-upload': 'node_modules/ng2-file-upload' },
  packages: {
    'ng2-file-upload': {
        main: './ng2-file-upload/ng2-file-upload.js', // also tried with './ng2-file-upload.js'
        defaultExtension: 'js'
    },
  }
}

我通过 import { FileDrop, FileUploader } from 'ng2-file-upload'; 导入 ng2-file-upload。

但是导入会导致我的应用程序“崩溃”:我的 TypeScript 编译器似乎工作正常(我可以看到其他代码的日志),但修改后的内容不再被转译,所以我无法运行任何东西。我没有与 ng2-file-upload 相关的任何错误日志(除了大量的 重复标识符)。

有什么主意吗?

编辑:我已将此包从 node_modules 提取到靠近我的应用程序的文件夹(vendor),并且我使用相对路径导入了 FileDrop 和 FileUploader,但是 systemjs 导入失败:

Error: SyntaxError: Unexpected token <(…)

编辑 2: 这里有一些细节。我的应用程序在一个 public 文件夹下,该文件夹包含两个子文件夹:src 和 build。我在 src 中编写 ts 代码(这是显而易见的),我的 tsc 会将转译后的文件保存到 build 中。目前,我没有打包我的文件,所以 build 内的层级结构与 src 的相同。

但只有在使用 ng2-file-upload 时会发生一些奇怪的情况:在转译过程中,tsc 会在 build 目录下添加一个 node_modules/ng2-file-upload 文件夹。目录结构如下:

public
|-- build
|    |-- core
|    |-- modules
|    |-- styles
|    |-- node_modules
|    |    |-- ng2-file-upload
+-- src
    |-- core
    |-- modules
    |-- styes

我不知道为什么 TSC 会转译这个包。当然,我的 tsconfig.ts 中已经排除了 node_modules。

答案#1

这是我的 systemjs.config,它可以工作:

      var map = {
    'app': 'app', // 'dist',
    'rxjs': 'node_modules/rxjs',
    'angular2-in-memory-web-api': 'node_modules/angular2-in-memory-web-api',
    '@angular': 'node_modules/@angular',
    'ng2-file-upload': 'node_modules/ng2-file-upload'
};


var packages = {
    'app': { main: 'main.js', defaultExtension: 'js' },
    'rxjs': { defaultExtension: 'js' },
    'angular2-in-memory-web-api': { defaultExtension: 'js' },
    'ng2-file-upload': { main: 'ng2-file-upload.js', defaultExtension: 'js' }
};

答案#2

我会尝试这个配置:

{
  map: { 'ng2-file-upload': 'node_modules/ng2-file-upload' },
  packages: {
    'ng2-file-upload': {
      defaultExtension: 'js'
    },
    (...)
  }
}

并以这种方式导入:

import { FileDrop, FileUploader } from 'ng2-file-upload/ng2-file-upload';

相关文章