【问题标题】:Webpack + Typescript + watch results in error TS2554 only on re-compilationWebpack + Typescript + watch 仅在重新编译时导致错误 TS2554
【发布时间】:2018-10-25 09:48:13
【问题描述】:

涉及的软件:

  • webpack 4.8.3
  • 打字稿 2.8.3
  • ts-loader 4.3.0

Webpack 配置:

rules: [
    {
        test: /\.ts(x?)$/,
        exclude: /node_modules/,
        use: ['ng-annotate-loader', 'ts-loader']
    },
    ...
]

这可以很好地编译我的项目一次构建 (webpack --mode development)。

但是,在监视模式下构建时它开始产生错误:

$ 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
          ...

(构建很好。现在我更改了一个文件,它会重新构建:)

[./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.

它所指的行是所有包含console.log调用的行,例如:

console.log(`Using locale ${locale}`);

同样,如果我中止手表并从头开始构建,它就可以正常工作。这里有什么问题?

为了测试,我删除了ng-annotate-loader;没有变化。
这在将构建工具链从 Webpack 3 升级到 4 并从 2.3.x 升级到 Typescript 之后开始发生。在旧版本中 build --watch 工作正常。

【问题讨论】:

  • 有可能得到一个最小的可重现 repo 吗?
  • 是的,这有点棘手...... :-/ 当我有时间时,我可能会尝试从头开始复制它,但现在我的一般问题是任何暗示为什么要在手表模式下重新构建与从头开始构建完全不同。这可能会帮助我缩小问题范围。

标签: node.js typescript webpack ts-loader


【解决方案1】:

我认为问题与webpack.NewWatchingPlugin(默认观看插件)有关,但是如果您添加新的webpack.OldWatchingPlugin() 插件,您可以强制webpack 使用旧的文件观看逻辑。 OldWatchingPluginNewWatchingPlugin 更稳定。

webpack 可能无法正常工作的原因有多种

  • 如果没有输出文件(具有不同的哈希值),则可能是配置问题,而不是 文件观看问题。
  • 没有足够的文件观察器会导致 Webpack 中的文件观察器不会 认识到这些变化。

【讨论】:

  • 看起来像 OldWatchingPlugin has been removed a while ago... 但我会尝试稍微调整一下手表插件设置,看看是否有什么不同。
  • @deceze,你不妨将d*ck 重命名为dig :-)
  • 您最终找到解决方案了吗?
猜你喜欢
  • 2016-05-06
  • 1970-01-01
  • 1970-01-01
  • 2015-10-03
  • 1970-01-01
  • 2016-12-08
  • 2018-03-11
  • 1970-01-01
  • 2017-04-09
相关资源
最近更新 更多