如何将javascript与typescript一起编译成一个包?

时间:2016-12-20 10:16:46

标签: javascript typescript compilation gulp bundle

我正在开发一个项目,我们同时拥有js和ts文件,它们应该合并到一个bundle文件中。

我正在使用gulp-typescript,我的配置如下:

           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 }))

我遇到的问题是,当配置只包含js文件时,它会创建一个包含代码的包。但是当配置中同时存在js和ts文件时,typescript会忽略javascript文件并仅编译ts文件。

如何创建包含来自js和ts文件的代码的包,并且还有ts文件的工作源图?

2 个答案:

答案 0 :(得分:0)

看起来你正在使用旧版本的gulp-typescript。也许这是一个问题?以下是适合我的任务,并发出编译的ts + map和任何原始的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(

您可以参考gulp-typescript文档获取更多样本。

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"
 ]
} 

希望这有帮助。

答案 1 :(得分:0)

首先尝试编译所有TS文件并将它们放在临时目录中,然后将所有这些文件与所有其他JS文件捆绑在一起。 同时将所有源图文件复制到最终目录。