如何将 javascript 与打字稿一起编译成一个包?
How do I compile javascript together with typescript into one bundle?
我正在做一个项目,我们有 js 和 ts 文件,应该将它们合并到一个包文件中。
我正在使用 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 文件的工作源映射的包?
您似乎在使用旧版本的 gulp-typescript。也许这是一个问题?以下是对我有用的任务,它会发出编译后的 ts + 地图和任何原始 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"
]
}
希望对您有所帮助。
尝试先编译所有 TS 文件并将它们放在临时目录中,然后将所有这些文件与所有其他 JS 文件捆绑在一起。
同时将所有源映射文件复制到最终目录。
我正在做一个项目,我们有 js 和 ts 文件,应该将它们合并到一个包文件中。
我正在使用 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 文件的工作源映射的包?
您似乎在使用旧版本的 gulp-typescript。也许这是一个问题?以下是对我有用的任务,它会发出编译后的 ts + 地图和任何原始 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"
]
}
希望对您有所帮助。
尝试先编译所有 TS 文件并将它们放在临时目录中,然后将所有这些文件与所有其他 JS 文件捆绑在一起。 同时将所有源映射文件复制到最终目录。