![](/img/trans.png)
[英]requirejs - combine several files to single js file that not dependent on requirejs
[英]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
只能与system
或amd
模块一起使用,如果我尝试使用任何其他模块系统,它会出错。但是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.