Webpack 不会因 TypeScript 错误而失败
Webpack is not failing on TypeScript error
自从我升级到版本 5 后,webpack 不会因 TypeScript 错误而失败。
这是我的场景:
index.ts(入口点):
const message: string = "Hello World";
console.log(message);
- 我运行
./node_modules/.bin/webpack --config webpack.config.js --watch
- 一切都很好。这是 webpack 的输出:
[webpack-cli] Compilation starting...
[webpack-cli] Compilation finished
asset index.js 50 bytes [compared for emit] [minimized] (name: main)
./src/index.ts 65 bytes [built] [code generated]
webpack 5.0.0 compiled successfully in 1251 ms
[webpack-cli] watching files for updates...
[webpack-cli] Compilation starting...
[webpack-cli] Compilation finished
asset index.js 50 bytes [emitted] [minimized] (name: main)
./src/index.ts 65 bytes [built] [code generated]
webpack 5.0.0 compiled successfully in 152 ms
[webpack-cli] watching files for updates...
- 在下一步中,我添加了一个应该会导致 TypeScript 错误的代码片段:
const message: number = "Hello World"; // <= Type 'string' is not assignable to type 'number'.ts(2322)
console.log(message);
- 我希望 webpack 监视进程失败或显示一些错误,但它并没有失败。这是 webpack 输出的内容:
[webpack-cli] Compilation starting...
[webpack-cli] Compilation finished
asset index.js 50 bytes [emitted] [minimized] (name: main)
./src/index.ts 65 bytes [built] [code generated]
webpack 5.0.0 compiled successfully in 244 ms
[webpack-cli] watching files for updates...
有趣的是,只有当我在启动 webpack watch 进程后更改 index.ts
时才会发生这种情况。如果我 运行 没有 --watch
选项的 webpack 我得到这个输出并且不会创建捆绑文件(如预期的那样):
[webpack-cli] Compilation finished
assets by status 50 bytes [cached] 1 asset
./src/index.ts 65 bytes [built] [code generated] [1 error]
ERROR in /Users/oliverschwendener/projects/test/src/index.ts
./src/index.ts
[tsl] ERROR in /Users/oliverschwendener/projects/test/src/index.ts(1,7)
TS2322: Type 'string' is not assignable to type 'number'.
webpack.config.js:
const path = require('path');
const config = {
entry: './src/index.ts',
module: {
rules: [
{
test: /\.tsx?$/,
use: 'ts-loader',
exclude: /node_modules/,
},
],
},
resolve: {
extensions: [ '.tsx', '.ts', '.js' ],
},
output: {
filename: 'index.js',
path: path.resolve(__dirname, 'bundle'),
},
};
module.exports = config;
*编辑:这是我的 tsconfig.json
{
"compilerOptions": {
"target": "es2015",
"module": "commonjs",
"lib": ["dom", "es2017"],
"sourceMap": true,
"strict": true,
"noImplicitAny": true,
"strictNullChecks": true,
"noUnusedLocals": true,
"moduleResolution": "node"
}
}
我无法想象这是 webpack、webpack-cli 或 ts-loader 中的错误。所以我猜我的配置有问题。谁能告诉我这里出了什么问题?谢谢!
- webpack 5.3.1(Webpack 版本 4.44.2 一切正常)
- webpack-cli 4.1.0
- ts-loader 8.0.7
- 打字稿 4.0.5
在您的 tsconfig.json
中,您可以将 noEmitOnError
设置为 true
以确保在遇到错误时进程中断:
{
"compilerOptions": {
"noEmitOnError": true,
(没有显式设置,默认为false
)
没关系,这是 ts-loader 中的错误:https://github.com/TypeStrong/ts-loader/issues/1204
自从我升级到版本 5 后,webpack 不会因 TypeScript 错误而失败。
这是我的场景:
index.ts(入口点):
const message: string = "Hello World";
console.log(message);
- 我运行
./node_modules/.bin/webpack --config webpack.config.js --watch
- 一切都很好。这是 webpack 的输出:
[webpack-cli] Compilation starting...
[webpack-cli] Compilation finished
asset index.js 50 bytes [compared for emit] [minimized] (name: main)
./src/index.ts 65 bytes [built] [code generated]
webpack 5.0.0 compiled successfully in 1251 ms
[webpack-cli] watching files for updates...
[webpack-cli] Compilation starting...
[webpack-cli] Compilation finished
asset index.js 50 bytes [emitted] [minimized] (name: main)
./src/index.ts 65 bytes [built] [code generated]
webpack 5.0.0 compiled successfully in 152 ms
[webpack-cli] watching files for updates...
- 在下一步中,我添加了一个应该会导致 TypeScript 错误的代码片段:
const message: number = "Hello World"; // <= Type 'string' is not assignable to type 'number'.ts(2322)
console.log(message);
- 我希望 webpack 监视进程失败或显示一些错误,但它并没有失败。这是 webpack 输出的内容:
[webpack-cli] Compilation starting...
[webpack-cli] Compilation finished
asset index.js 50 bytes [emitted] [minimized] (name: main)
./src/index.ts 65 bytes [built] [code generated]
webpack 5.0.0 compiled successfully in 244 ms
[webpack-cli] watching files for updates...
有趣的是,只有当我在启动 webpack watch 进程后更改 index.ts
时才会发生这种情况。如果我 运行 没有 --watch
选项的 webpack 我得到这个输出并且不会创建捆绑文件(如预期的那样):
[webpack-cli] Compilation finished
assets by status 50 bytes [cached] 1 asset
./src/index.ts 65 bytes [built] [code generated] [1 error]
ERROR in /Users/oliverschwendener/projects/test/src/index.ts
./src/index.ts
[tsl] ERROR in /Users/oliverschwendener/projects/test/src/index.ts(1,7)
TS2322: Type 'string' is not assignable to type 'number'.
webpack.config.js:
const path = require('path');
const config = {
entry: './src/index.ts',
module: {
rules: [
{
test: /\.tsx?$/,
use: 'ts-loader',
exclude: /node_modules/,
},
],
},
resolve: {
extensions: [ '.tsx', '.ts', '.js' ],
},
output: {
filename: 'index.js',
path: path.resolve(__dirname, 'bundle'),
},
};
module.exports = config;
*编辑:这是我的 tsconfig.json
{
"compilerOptions": {
"target": "es2015",
"module": "commonjs",
"lib": ["dom", "es2017"],
"sourceMap": true,
"strict": true,
"noImplicitAny": true,
"strictNullChecks": true,
"noUnusedLocals": true,
"moduleResolution": "node"
}
}
我无法想象这是 webpack、webpack-cli 或 ts-loader 中的错误。所以我猜我的配置有问题。谁能告诉我这里出了什么问题?谢谢!
- webpack 5.3.1(Webpack 版本 4.44.2 一切正常)
- webpack-cli 4.1.0
- ts-loader 8.0.7
- 打字稿 4.0.5
在您的 tsconfig.json
中,您可以将 noEmitOnError
设置为 true
以确保在遇到错误时进程中断:
{
"compilerOptions": {
"noEmitOnError": true,
(没有显式设置,默认为false
)
没关系,这是 ts-loader 中的错误:https://github.com/TypeStrong/ts-loader/issues/1204