2016-10-13 40 views
5

我想在使用Node.js時將TypeScript編譯爲一個文件。如何將Node.js的TypeScript代碼編譯爲一個文件?

我曾嘗試配置 「tsconfig.json」 是這樣的:

"compilerOptions": { 
    "module": "commonjs", 
    "target": "es6", 
    "noImplicitAny": false, 
    "sourceMap": false, 
    "outFile": "./app/index.js", 
    "pretty": true, 
    "types": [ 
     "node" 
    ] 
    }", 

...但是當我嘗試module" set to 「CommonJS的」`,我得到的錯誤:

error TS6082: Only 'amd' and 'system' modules are supported alongside --outFile. 

如果我將其更改爲"module": "system",在node運行該文件時,我得到這個錯誤:

ReferenceError: System is not defined 

如果我改變module"amd",我在node運行該文件時,出現此錯誤:

ReferenceError: define is not defined 

回答

11

這是不可能捆綁的Node.js模塊與單獨的打字稿編譯單個文件:在每個文件CommonJS模塊系統(由Node.js使用)被視爲單個模塊,如果沒有在許多JavaScript代碼打包程序中找到合適的模塊捆綁技術(如Browserify,Webpack,Rollup,Parceljs,...),則無法將它們連接在一起。 )。

其他模塊系統(如SystemJS)沒有此限制,並且可以使用TypeScript編譯器將模塊定義連接成單個文件:tsc ... --outfile bundle.js -module system。但是,它們並不支持Node.js。

對於實際的解決方案,有兩個合理的選擇:要麼使用單獨的工具(Browserify,Webpack,...)將項目配置爲捆綁解決方案,要麼在您的Node.js應用程序中包含SystemJS的實現說明here)。

我還會以一個附註結束:捆綁服務器端代碼幾乎沒有任何好處。捆綁通常在前端項目中執行,以減少客戶端資源的大小。

+0

很好的答案,謝謝,不知道爲什麼這是從來沒有upvoted ... @ user236582請不要忽視好的答案 –

相關問題