我正在尝试将多个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
仅可与system
或amd
模块一起使用,如果我尝试使用其他模块系统,则会出现错误。但是对于none
,没有错误,这使我相信这是一个有效的组合。)
有没有办法实现我想要的?如果仅使用Typescript不能完成此操作,那么我会接受其他选择(可能是大口吃?)。
很抱歉,如果答案很明显,我是Typescript的新手,对可用的工具知之甚少。我知道对此还有其他问题,但是没有一个答案对我有用。
答案 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要求每个存储过程都必须独立,因此正则表达式替换项将删除所有“导入”或“导出”内容。