2016-10-07 95 views
1

我有一個使用Common JS模塊和System JS加載器的Typescript 2.0項目。我使用Visual Studio代碼作爲IDE。我在項目中使用外部庫(filesaver JS)時遇到問題。如何在Typescript 2.0項目中使用外部庫?

我通過npm安裝了librarytype definition。兩者分別出現在我的node_modules和node_module/@類型中。

如何在保存blob(轉換爲JSON字符串的對象)的函數中引用(導入)我的TypeScript代碼中的filesaver saveAs函數?

我嘗試了導入的幾種變體,但是他們都不適合我。我得到'index.d.ts'不是模塊錯誤,或'模塊未找到'錯誤。

這裏是我的嘗試:

import filesaver = require('FileSaver'); //error: index.d.ts is not a module import {FileSaver} from 'file-saver'; //error: cannot find module file-saver

tsconfig.json

{ 
    "compilerOptions": { 
    "target": "es5", 
    "module": "commonjs", 
    "declaration": false, 
    "removeComments": true, 
    "noLib": false, 
    "emitDecoratorMetadata": true, 
    "experimentalDecorators": true, 
    "lib": ["es6", "es2015", "dom"], 
    "sourceMap": true, 
    "pretty": true, 
    "allowUnreachableCode": false, 
    "allowUnusedLabels": false, 
    "noImplicitAny": true, 
    "noImplicitReturns": true, 
    "noImplicitUseStrict": false, 
    "noFallthroughCasesInSwitch": true, 
    "typeRoots": [ 
     "./node_modules/@types", 
     "./node_modules" 
    ], 
    "types": [ 
     "node" 
    ] 
    }, 
    "exclude": [ 
    "node_modules", 
    "dist", 
    "src" 
    ], 
    "compileOnSave": false 
} 
+0

您可以顯示您的tsconfig.json(如果您使用的是)文件,並且可以提供如何嘗試導入它的示例? –

+0

@DaveV - 爲問題添加了所需的信息。 – ebhh2001

+0

我剛纔說得太早了,但我認爲我已經開始工作了(或者至少有一個解決方法)。我無法獲得一個'import'工作,但我正要做'var fileSaver = require(「file-saver」);'然後像'fileSaver.saveAs();'調用'saveAs';' –

回答

0

這可能不是完美的解決方案,但以下三行在IE 11爲我工作和Chrome。

var saveAs = require('file-saver'); 
var blob = new Blob([JSON.stringify(myDataObject)], { type: 'text/plain;charset=utf-8' }); 
saveAs(blob, "file.txt"); 
2

我在使用System JS模塊加載器的Angular 2項目中遇到同樣的問題。 對我來說

import {saveAs} from 'file-saver'; 

工作,但只有在我明確地定義文件金丹模塊格式設置爲系統JS配置CJS:

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

據我瞭解SystemJS將識別文件 - 保存爲AMD模塊默認情況下。也許在文件保護程序中的AMD模塊定義有問題,但我對此沒有深入的瞭解。 (另請參閱https://github.com/eligrey/FileSaver.js/blob/master/FileSaver.js#L182

+2

P.S .:在設置cjs mdoule格式之前,我還有一個問題:'fileSaver.saveAs不是一個函數',如上面在@ ebhh2001評論中提到的那樣 –

相關問題