node.js - Webpack + Typescript + watch duce la eroarea TS2554 doar la re-compilare
Software implicat:
- webpack 4.8.3
- typescript 2.8.3
- ts-loader 4.3.0
Configurarea Webpack:
rules: [
{
test: /\.ts(x?)$/,
exclude: /node_modules/,
use: ['ng-annotate-loader', 'ts-loader']
},
...
]
Acest lucru compilează proiectul meu fără probleme la o singură compilare (webpack --mode development).
Totuși, începe să producă erori atunci când se construiește în modul de monitorizare:
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
...
(Construcția este în regulă. Acum schimb un fișier și se reconstruiește:)
[./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.
Liniile la care se face referire sunt toate liniile care conțin apeluri console.log, de exemplu:
console.log(`Using locale ${locale}`);
Din nou, dacă întrerup ceasul și construiesc de la zero, funcționează perfect. Care e problema aici?
Pentru testare am eliminat ng-annotate-loader; fără schimbare.
Acest lucru a început să se întâmple după actualizarea lanțului de instrumente de construție de la Webpack 3 la 4, împreună cu actualizările asociate la Typescript de la 2.3.x. În versiunile vechi build --watch funcționa bine.
Răspuns #1
Cred că problema este legată de webpack.NewWatchingPlugin (pluginul de observare implicit), dar poți forța webpack să folosească logica veche de observare a fișierelor dacă adaugi noul plugin webpack.OldWatchingPlugin(). OldWatchingPlugin este mai stabil decât NewWatchingPlugin.
Există o varietate de motive pentru care webpack ar putea să nu funcționeze corespunzător:
- Dacă nu sunt generate fișiere (cu hashuri diferite), este probabil o problemă de configurare, nu o problemă legată de monitorizarea fișierelor.
- Lipsa unui număr suficient de urmăritori de fișiere face ca urmăritorul de fișiere din Webpack să nu recunoască modificările.