繁体   English   中英

将几个Typescript文件合并到一个JS文件中

[英]Combine several Typescript files to a single JS file

我正在尝试将几个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,我可以选择其他选项(gulp,也许?)。

对不起,如果答案很明显,我对Typescript很新,而且我对可用的工具知之甚少。 我知道还有其他问题,但没有一个答案对我有用。

尝试除none之外的module值。 即使在组合的单个文件中,JS也需要某种方式来定义和封装来自单独文件的代码。 我首先尝试--module= UMD UMD意味着“通用模块定义”,只是定义了一种方法,使代码块可以封装在隔离的作用域中,并在一个文件中相互访问 - 它不需要运行时支持的模块系统(如CommonJS或ES6模块)目标平台。

我最终使用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要求每个存储过程都是自包含的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM