2016-12-20 61 views
1

我正在做一個項目,我們有js和ts文件,他們應該被合併到一個包文件中。如何將JavaScript與打字稿一起編譯到一個包中?

我使用一飲而盡,打字稿和我的配置看起來如下:

  gulp.src(cfg.ts_src) 
        .pipe(sourcemaps.init()) 
        .pipe(typescript({ 
         allowJs: true, 
         declaration: false, 
         diagnostics: false, 
         emitDecoratorMetadata: true, 
         experimentalDecorators: true, 
         module: "system", 
         moduleResolution: "classic", 
         noImplicitAny: true, 
         outFile: "./" + cfg.file, 
         preserveConstEnums: true, 
         pretty: true, 
         removeComments: true, 
         rootDir: "./static/" + cfg.dest, 
         target: "es5", 
        })) 
       .pipe(sourcemaps.write('.', { sourceRoot: "/static/", includeContent: false })) 

我的問題是,當configutation只包含js文件,它會創建代碼包。但是當配置中同時存在js和ts文件時,typescript將忽略javascript文件並僅編譯ts文件。

如何創建一個包含來自js和ts文件的代碼並且還有ts文件的工作源地圖的包?

+0

嘗試先編譯所有TS文件,並將它們放在臨時目錄中,然後將所有這些文件與所有其他js文件捆綁在一起。 –

+0

之後我還會有打字稿源文件嗎? – gemrey

+0

只需將它們複製到所有文件的最終目錄 –

回答

0

嘗試先編譯所有TS文件,並將它們放在臨時目錄中,然後將所有這些文件與所有其他JS文件捆綁在一起。 也複製你的所有源代碼文件到最後的目錄。

+1

做到了這一點,它有效,有時最簡單的做法是最好的! – gemrey

0

它看起來像你正在使用老版本的gulp打字稿。也許這是一個問題?下面是對我的作品併發出兩個編譯TS +地圖和任何原料JS任務:

gulp.task('build.js.dev',() => 
{ 
    var tsProject = ts.createProject('tsconfig.json', { 
     typescript: require('typescript') 
    }); 

    var tsResult = tsProject.src() 
     .pipe(sourcemaps.init()) 
     .pipe(tsProject()); 

    return merge([ 
     //Write definitions 
     //tsResult.dts.pipe(gulp.dest(TEMP_TARGET_FOLDER)), 
     //Write compiled js 
     tsResult.js.pipe(sourcemaps.write(
      ".", 
      { 
       includeContent: true, 
       sourceRoot: __dirname + "/dist" 
      })).pipe(gulp.dest(TEMP_TARGET_FOLDER))]); 
}); 

注意部分:tsResult.js.pipe(sourcemaps.write(

你可以參考吞氣,打字稿文檔的更多樣本。

的tsconfig是非常相似的選項:

{ 
"compilerOptions": { 
    "emitDecoratorMetadata": true, 
    "experimentalDecorators": true, 
    "moduleResolution": "node", 
    "module": "commonjs", 
    "target": "es6", 
    "sourceMap": true, 
    "outDir": "dist", 
    "declaration": false, 
    "allowJs": true, 
    "jsx": "react", 
    "forceConsistentCasingInFileNames": true, 
    "types": [ 
     "node", 
     "jasmine" 
    ] 
}, 
"exclude": [ 
    "./node_modules", 
    "./dist", 
    "./.vscode" 
] 
} 

希望這有助於。

+0

我正在使用最新的,但也許是一種老的配置方式。 我試圖將它編譯成一個單一的文件 - 你不像我所看到的那樣。但我現在已經解決了。 – gemrey