gulp-typescript遇编译错误时无法输出文件的问题求助
问题:gulp-typescript遇代码错误时不输出文件,tsc可正常输出
我使用gulp-typescript编译代码时,只要代码存在错误,工具就不会输出任何文件。但tsc命令在同样的错误代码下,仍能按预期成功输出文件,我需要gulp-typescript也实现这个效果。
实际运行时出现如下错误:
Property value can only be string literal, numeric literal, 'true', 'false', 'null', object literal or array literal. [10:45:09] Using gulpfile ~\Desktop\test\gulpfile.js [10:45:09] Starting 'default'... src\script.ts(2,3): error TS2339: Property 'gulp' does not exist on type '{}'. TypeScript: 1 semantic error TypeScript: emit succeeded (with errors) [10:45:09] 'default' errored after 525 ms [10:45:09] Error: TypeScript: Compilation failed at Output.mightFinish (C:\Users\Pouria\Desktop\test\node_modules\gulp-typescript\release\output.js:131:43) at C:\Users\Pouria\Desktop\test\node_modules\gulp-typescript\release\output.js:44:22 at processTicksAndRejections (internal/process/task_queues.js:93:5)
项目结构
项目结构简单,包含以下文件和目录:
- tsconfig.json
- package.json
- gulpfile.js
- src/ 文件夹(内有单个script.ts文件)
各文件内容
tsconfig.json
{ "compilerOptions": { "outDir": "./dist", "allowJs": true, "target": "es2017", "lib": [ "es2017" ], "noEmitOnError": false, "noEmit": fals, }, "include": ["./src/**/*"], }
package.json
{ "name": "test", "version": "1.0.0", "description": "", "main": "gulpfile.js", "dependencies": { "gulp": "^4.0.2", "gulp-typescript": "^6.0.0-alpha.1", "typescript": "^4.7.4" }, "devDependencies": {}, "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC" }
gulpfile.js
var gulp = require('gulp'); var ts = require('gulp-typescript'); var tsProject = ts.createProject("tsconfig.json"); gulp.task('default', function(){ return tsProject.src().pipe(tsProject()).js.pipe(gulp.dest("dist")); });
script.ts
var v = {}; v.gulp = "does not work";
依赖版本
运行npm ls --depth 0的结果:
test@1.0.0 C:\Users\Pouria\Desktop\test +-- gulp@4.0.2 +-- gulp-typescript@6.0.0-alpha.1 `-- typescript@4.7.4
解决方法
修复tsconfig.json的拼写错误
首先注意到tsconfig中"noEmit": fals,存在拼写错误,应该改为"noEmit": false,,这个错误会导致配置无法正常生效。配置gulp-typescript允许错误时输出文件
gulp-typescript默认在编译出现错误时会终止任务,要让它即使有错误也继续输出文件,可以通过两种方式实现:方式一:创建项目时设置
emitError: falsevar gulp = require('gulp'); var ts = require('gulp-typescript'); // 添加emitError: false配置,禁止抛出编译错误 var tsProject = ts.createProject("tsconfig.json", { emitError: false }); gulp.task('default', function(){ return tsProject.src().pipe(tsProject()).js.pipe(gulp.dest("dist")); });方式二:使用空报告器避免任务终止
var gulp = require('gulp'); var ts = require('gulp-typescript'); var tsProject = ts.createProject("tsconfig.json"); gulp.task('default', function(){ return tsProject.src() .pipe(tsProject(ts.reporter.nullReporter())) // 使用空报告器,不触发错误终止 .js.pipe(gulp.dest("dist")); });同时确保tsconfig.json中的
noEmitOnError已经设置为false,这个配置会告诉TypeScript编译器即使存在错误也要输出编译后的文件。
内容的提问来源于stack exchange,提问作者Pouria P
相关产品推荐
相关产品推荐

