将多个Typescript文件合并为一个JS文件

时间:2019-04-29 11:01:44

标签: javascript typescript

我正在尝试将多个Typescript文件合并为一个JS文件,而没有任何类型的模块系统。基本上,我有这样的文件:

// Main.ts
import { foo } from "./foo";

function main() {
    console.log("main");
    foo();
}

// foo.ts
export function foo() {
    console.log("foo");
}

我想生成一个这样的JS文件:

// out.js
function main() {
    console.log("main");
    foo();
}

function foo() {
    console.log("foo");
}

(原因是代码是针对Cosmos DB存储过程的,该过程必须是一个没有导入的文件)。

在我的tsconfig.json中,将module设置为none,将outFile设置为./out.js。但是当我构建时,它什么也没做。没有错误,但是没有发出out.js。

(显然outFile仅可与systemamd模块一起使用,如果我尝试使用其他模块系统,则会出现错误。但是对于none,没有错误,这使我相信这是一个有效的组合。)

有没有办法实现我想要的?如果仅使用Typescript不能完成此操作,那么我会接受其他选择(可能是大口吃?)。

很抱歉,如果答案很明显,我是Typescript的新手,对可用的工具知之甚少。我知道对此还有其他问题,但是没有一个答案对我有用。

2 个答案:

答案 0 :(得分:0)

使用module以外的none值进行的实验。即使在合并的单个文件中,JS也需要 some 方式来定义和封装来自单独文件的代码。我将从尝试--module= UMD开始。 UMD的意思是“通用模块定义”,它只是定义了一种方法,将代码块包装在隔离的范围内并可以从一个文件中相互访问-它不需要运行时支持的模块系统(例如CommonJS或ES6模块)。目标平台。

答案 1 :(得分:0)

我最终使用Gulp脚本解决了这个问题,该脚本将所有内容连接到一个文件中。这就是丑陋的地方:

const gulp = require("gulp");
const ts = require("gulp-typescript");
const path = require("path");
const flatmap = require("gulp-flatmap");
const replace = require('gulp-replace');
const concat = require('gulp-concat');

gulp.task("build-cosmos-stored-procedures", function() {
    const sharedScripts = "CosmosServerScriptHelpers/*.ts";
    const tsServerSideScripts = "CosmosStoredProcedures/**/*.ts";

    return gulp.src(tsServerSideScripts)
        .pipe(flatmap((stream, file) =>
        {
            let outFile = path.join(path.dirname(file.relative), path.basename(file.relative, ".ts") + ".js");
            let tsProject = ts.createProject("tsconfig.json");
            return stream
                .pipe(gulp.src(sharedScripts))
                .pipe(tsProject())
                .pipe(replace(/^\s*import .+;$\s*/gm, ""))
                .pipe(replace(/^\s*export .+;$\s*/gm, ""))
                .pipe(replace(/^\s*export /gm, " "))
                .pipe(concat(outFile))
                .pipe(gulp.dest("CosmosStoredProcedures"));
        }));
});

gulp.task("default", gulp.series("build-cosmos-stored-procedures"));

基本上,它的作用是: -从存储过程文件夹(a.ts,b.ts等)中获取每个TS文件 -使用共享脚本分别编译每个文件 -将输出文件合并为一个文件(a.js,b.js等) -每个输出文件都包含原始源的输出,以及所有共享脚本的输出

由于Cosmos DB要求每个存储过程都必须独立,因此正则表达式替换项将删除所有“导入”或“导出”内容。