Búsqueda de sitios web

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.

Artículos relacionados