Angular2 - 在SystemJS中导入第三方javascript

时间:2016-06-16 07:08:55

标签: javascript express angular gulp

由于某种原因,

fileSaver未被映射。 angular2-jwt工作正常。

我做npm install file-saver -save以获取文件保护程序,然后按如下方式引用它(我有一个gulp任务将js文件移动到libs目录,我看到那里的文件)

index.htmlI中的

已将脚本包含在src和system.config

    <script src="libs/file-saver/FileSaver.js"></script>

<!-- 2. Configure SystemJS -->
    <script>
      System.config({
        packages: {        
          app: {
            format: 'register',
            defaultExtension: 'js'
          } 
        } ,
        map: {
          "angular2-jwt": "libs/angular2-jwt/angular2-jwt.js"
          ,"fileSaver":"libs/file-saver/FileSaver.js"
        }
      });
      System.import('app/bootstrap')
            .then(null, console.error.bind(console));
    </script>

component.ts

这里找不到fileSaver

import {SaveAs} from 'fileSaver';     

我得到的错误就是这个

 error TS2307: Cannot find module 'fileSaver'.   

知道这里有什么问题吗?

2 个答案:

答案 0 :(得分:2)

就我而言,我让它像这样工作:

<强>的package.json

"dependencies": {
    // ... all angular dependencies
    "file-saver": "1.3.2"
 },

<强>的index.html

<!-- all angular dependencies and other 3rd party -->
<script src="node_modules/file-saver/FileSaver.js"></script>

<强> typings.json

// other typings needed
"filesaver": "github:DefinitelyTyped/DefinitelyTyped/FileSaver/FileSaver.d.ts#d21f1bd1fd079bbc18bc88ed71d2be7f5707e33a"

<强>使用

var blob = new Blob([this.response], {type: 'application/zip'});
saveAs(blob, 'project.zip');

在运行之前,您需要执行npm install

就是这样,希望它有所帮助。

  

这不会让你import {SaveAs} from 'fileSaver';也没有完整的代码完成,但是在   至少它有效

答案 1 :(得分:0)

安装库和打字(@types)。然后,

import {saveAs} from 'file-saver';

的工作。 另外,我必须在System JS配置中明确地将文件保护程序的模块格式设置为cjs:

"packages":{
     "file-saver":{
          "main":"FileSaver.js", 
          "format": "cjs"
     }
}

据我所知,SystemJS默认将文件保护程序识别为AMD模块。也许在文件保护程序中AMD模块定义有问题,但我对此并不十分了解。 (另见https://github.com/eligrey/FileSaver.js/blob/master/FileSaver.js#L182

在没有设置cjs模块格式的情况下,我在运行时得到了“fileSaver.saveAs不是函数”。