我正在尝试使用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
1条答案
按热度按时间wwtsj6pe1#
好吧,在深入研究了github问题部分之后,发现如果在过程中有任何错误,gulp实际上是故意失败的。
要解决这个问题,gulp文件应该如下所示:
即添加
.on("error", () => { /* Ignore compiler errors */})
以处理/忽略错误。我花了很多时间试图弄清楚到底发生了什么。遗憾的是,在教程、入门页面、包描述等任何地方都没有提到这种行为。
这是从 typescript 官方手册,解释为什么 typescript 编译,即使有错误:
考虑到tsc报告了一个关于我们代码的错误,这可能有点令人惊讶,但是这是基于TypeScript的一个核心值:很多时候,您会比TypeScript更清楚。
...
因此,TypeScript不会妨碍您。当然,随着时间的推移,您可能希望对错误有更多的防范,并使TypeScript的行为更严格一些。在这种情况下,您可以使用noEmitOnError编译器选项。尝试更改您的hello.ts文件并使用该标志运行tsc。
因此,如果有人提到
gulp-typescript
和tsc
之间存在这种鲜明的对比,那将是非常有帮助的。