如果有错误,gulp-typescript不会发出

mlmc2os5  于 2022-12-08  发布在  Gulp
关注(0)|答案(1)|浏览(265)

我正在尝试使用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文件和其中具有单个script.ts文件的src文件夹。
我的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
wwtsj6pe

wwtsj6pe1#

好吧,在深入研究了github问题部分之后,发现如果在过程中有任何错误,gulp实际上是故意失败的。
要解决这个问题,gulp文件应该如下所示:

var gulp = require('gulp');
var ts = require('gulp-typescript');
var tsProject = ts.createProject("tsconfig.json");

gulp.task('default', function(){
    return tsProject.src().pipe(tsProject())
        .on("error", () => { /* Ignore compiler errors */})
        .js.pipe(gulp.dest("dist"));
});

即添加.on("error", () => { /* Ignore compiler errors */})以处理/忽略错误。
我花了很多时间试图弄清楚到底发生了什么。遗憾的是,在教程、入门页面、包描述等任何地方都没有提到这种行为。
这是从 typescript 官方手册,解释为什么 typescript 编译,即使有错误:
考虑到tsc报告了一个关于我们代码的错误,这可能有点令人惊讶,但是这是基于TypeScript的一个核心值:很多时候,您会比TypeScript更清楚。
...
因此,TypeScript不会妨碍您。当然,随着时间的推移,您可能希望对错误有更多的防范,并使TypeScript的行为更严格一些。在这种情况下,您可以使用noEmitOnError编译器选项。尝试更改您的hello.ts文件并使用该标志运行tsc。
因此,如果有人提到gulp-typescripttsc之间存在这种鲜明的对比,那将是非常有帮助的。

相关问题