node.js - Webpack + Typescript + watch resulta en el error TS2554 solo en la recompilación
Software involucrado:
- webpack 4.8.3
- typescript 2.8.3
- ts-loader 4.3.0
Configuración de Webpack:
rules: [
{
test: /\.ts(x?)$/,
exclude: /node_modules/,
use: ['ng-annotate-loader', 'ts-loader']
},
...
]
Esto compila mi proyecto bien en una sola compilación (webpack --mode development).
Sin embargo, empieza a producir errores al construir en modo de vigilancia:
webpack --progress --watch --mode development
Webpack is watching the files…
Hash: e8f3fc158b2b6feaad07
Version: webpack 4.8.3
Time: 75713ms
Built at: 05/15/2018 3:25:27 PM
Asset Size Chunks Chunk Names
...
(La compilación está bien. Ahora cambio un archivo, y se recompila:)
[./ts/foo/foo.ts] 3.82 KiB {foo} [built] [1 error]
[./ts/foo/controllers/bar.ts] 3.8 KiB {baz} {foo} [built]
[./ts/foo/baz.ts] 4.21 KiB {baz} [built] [1 error]
+ 668 hidden modules
ERROR in .../ts/foo/foo.ts
./ts/foo/foo.ts
[tsl] ERROR in .../ts/foo/foo.ts(84,9)
TS2554: Expected 0 arguments, but got 1.
ERROR in .../ts/foo/baz.ts
./ts/foo/baz.ts
[tsl] ERROR in .../ts/foo/baz.ts(105,9)
TS2554: Expected 0 arguments, but got 1.
Las líneas a las que se refiere son todas las líneas que contienen llamadas a console.log, por ejemplo:
console.log(`Using locale ${locale}`);
De nuevo, si cancelo la observación y construyo desde cero, funciona perfectamente. ¿Cuál es el problema aquí?
Para realizar pruebas he eliminado ng-annotate-loader; no hay cambio.
Esto empezó a ocurrir después de actualizar la cadena de herramientas de compilación de Webpack 3 a 4 con las actualizaciones asociadas a Typescript desde 2.3.x. En las versiones antiguas build --watch funciona bien.
Respuesta #1
Creo que el problema está relacionado con webpack.NewWatchingPlugin (el complemento de vigilancia por defecto), pero puedes forzar a webpack a usar la lógica antigua de vigilancia de archivos si agregas un nuevo complemento webpack.OldWatchingPlugin(). El OldWatchingPlugin es más estable que NewWatchingPlugin.
Hay una variedad de razones por las que webpack podría no estar funcionando correctamente:
- Si no se generan archivos (con hashes diferentes), es probable que sea un problema de configuración, no un problema de vigilancia de archivos.
- No tener suficientes observadores de archivos hace que el observador de archivos en Webpack no reconozca los cambios.