根据手表的WebPack文档
WebPack可以在更改时观看文件并重新编译。
在我的理解中,这意味着WebPack只会编译更改的文件。
我有一个看起来像这样的webpack.config.js
module.exports = {
watch: true,
watchOptions: {
ignored: /node_modules/,
},
entry: {
"first": './web/assets/js/first.tsx',
"second": './web/assets/js/second.tsx',
},
// other stuff
}
现在,运行./node_modules/.bin/webpack
时,输出日志使其看起来像所有文件均已编译
Webpack is watching the files…
Hash: d0ac7b9d70b906068f77
Version: webpack 4.3.0
Time: 10462ms
Built at: 3/29/2018 11:50:43 AM
Asset Size Chunks Chunk Names
first.js 234 KiB 0 [emitted] first
second.js 739 bytes 1 [emitted] second
Entrypoint second = second.js
Entrypoint first = first.js
[13] ../locale-data/index.js (ignored) 15 bytes {0} [built]
[14] ./web/assets/js/react/component/First/First.tsx 1.05 KiB {0} [built]
[15] ./web/assets/js/translations/tr.ts 4.83 KiB {0} [built]
[16] ./web/assets/js/translations/it.ts 4.64 KiB {0} [built]
[17] ./web/assets/js/translations/fr.ts 4.78 KiB {0} [built]
[18] ./web/assets/js/translations/en.ts 4.31 KiB {0} [built]
[19] ./web/assets/js/translations/de.ts 4.67 KiB {0} [built]
[31] ./lib/locales (ignored) 15 bytes {0} [built]
[37] ./lib/locales (ignored) 15 bytes {0} [built]
[57] ./web/assets/js/first.tsx 559 bytes {0} [built]
[58] ./web/assets/js/second.tsx 350 bytes {1} [built]
+ 48 hidden modules
现在,当我更改first.tsx
中的某些内容时,输出相同。在我看来,每个文件都已重新编译,但我只希望已更改的条目重新编译。我在这里错过某些东西还是误会了什么?
我的目标是仅重新编译已更改的文件,这应该是webpack watch
的工作方式。
更新:有关进一步的证明,我删除了两个编译文件,更改了一个输入点的行,而观察者仍将两者都编译。
Update2:这里有一些复制步骤
复制步骤:这些步骤假定您已经安装了yarn/npm
。
- 查看我创建的存储库,您可以在https://github.com/tzfrs/webpack-watch-bug 上找到。
- 最初运行
yarn install
或npm install
。 - 运行
./node_modules/.bin/webpack
。这应该在dist
文件夹中创建两个文件并自动观看。 - 删除
dist/second.js
- 更改
src/first.js
中的某些内容 -
src/second.js
没有更改,但仍会重新编译(因为dist/second.js
再次创建(。
webpack和类似的观察者将整个捆绑包放在内存中,并观看文件流。您可以认为这有点像异步减少。每次将数据推到流时,都会相应地更新累积的捆绑包,直到流关闭并结束。
。如果它具有一个输出目录,则将捆绑包的最新状态(即整个捆绑包(写入每个更改的目录。但是,即使我们将其视为主要目标,但如果我们进行降低类比,它更像是"副作用"。
这并不意味着它重新编译了所有内容...实际上,意外的变化像不安全的删除一样实际上可能会打破观察者,这正是因为它每次都会发生任何变化时从头开始。P>
有关演示,请克隆更大的项目,并注意第一个编译(整个捆绑包(和后续(单个文件(更新之间的区别。