2016-08-02 75 views
9

我有2個工作方式不同,我不能告訴有什麼不同。我曾在一個項目中的以下...爲什麼我會在一個webpack項目上獲得「意外的令牌導入」,但卻沒有獲得「意外的令牌導入」?

// In .ts wile 
import 'core-js/es6'; 
import 'reflect-metadata'; 

這在一個項目上的偉大工程,但是,與同tsconfig.json和typings.json還有TS-裝載機另一個項目中的WebPack配置配置我得到...

Uncaught SyntaxError: Unexpected token import

的transpiled JS就沒有一個看起來像這樣...

/***/ function(module, exports, __webpack_require__) { 

    /* WEBPACK VAR INJECTION */(function(process) {import 'core-js/es6'; 
    import 'reflect-metadata'; 

我會後的後續項目之一位

所以我的問題是我錯過了什麼?打字稿定義沒有正確導入?我已經嘗試再次運行typings install,只是爲了排除這一點。

更多信息

//tsconfig 
{ 
    "compilerOptions": { 
    "target": "es5", 
    "module": "commonjs", 
    "moduleResolution": "node", 
    "sourceMap": true, 
    "emitDecoratorMetadata": true, 
    "experimentalDecorators": true, 
    "removeComments": false, 
    "noImplicitAny": true, 
    "suppressImplicitAnyIndexErrors": true 
    } 
} 

// Typings.json 
{ 
    "globalDependencies": { 
    "core-js": "registry:dt/core-js#0.0.0+20160602141332", 
    "jasmine": "registry:dt/jasmine#2.2.0+20160621224255", 
    "node": "registry:dt/node#6.0.0+20160621231320" 
    } 
} 
+0

那麼,什麼是這兩個項目之間有什麼不同?它看起來像打字稿在打包之前不會被編譯。 – Bergi

+0

我同意,但它編譯罰款第一個項目 – Jackie

+0

任何機會的webpack配置? –

回答

11

我在那裏用異步\等待和承諾(包括ES6構建)使用TS源文件的輸入關鍵字導入其他TS模塊我有一個類似的問題。

我可以用TypeScript使用默認的js目標版本(ES5)進行傳輸,這會產生transpile錯誤,抱怨async \ await和Promise關鍵字,但是因爲我實際上正在運行Node 6.4.0。一切實際上在運行時工作。

在上述情況下,「導入」關鍵字被翻譯從TS到JS爲:

var BasePage_1 = require('./BasePage'); 

所以,我越來越TSC transpile錯誤,但節點工作正常運行時與上述「導入'翻譯。

如果我使用-t開關來告訴tsc將其轉儲到ES6,那麼轉儲清理時沒有錯誤,但是由於節點說它不知道發送的js文件中的「導入」關鍵字,因此節點失敗。

現在,TSC發出下面的翻譯「導入」:

import { BasePage } from './BasePage';

所以,上面的翻譯真的不是在所有翻譯和節點上的JS文件扼流圈與在「導入」關鍵字運行。

摘要:

myTypeScriptSourceFile.ts -t ES6 -m commonjs 

現在我得到一個乾淨的transpile並沒有運行時:

我使用此命令行告訴TSC使用ES6庫,但發出適當的模塊導入語法解決了這個難題來自Node的錯誤。因爲現在'Import'正在使用'require'保留字正確翻譯。

更多細節在這裏: https://www.typescriptlang.org/docs/handbook/compiler-options.html https://www.typescriptlang.org/docs/handbook/module-resolution.html

+1

這也可以通過在tsconfig.json中設置「target」和「module」編譯器選項來實現。 – Echolot

+1

明確地說,在tsconfig文件'「module」中添加這一行:「commonjs」' –