我有两个项目:应用程序和库。应用程序依赖于库。我同时使用 yalc
处理这两个问题,这样当我更新库时,它会更新 App/node-modules/Library。
不幸的是,Webpack 会主动缓存 node_modules,它不会获取对 App/node-modules/Library 的更改。重新加载应用程序没有帮助,甚至杀死手表并重新启动它,因为它将缓存保留在文件系统中。我在某处读到,对 package-lock.json
或 yarn.lock
的更改会使它们无效,但 yalc 有自己单独的锁定文件。
什么有效:
- 将
cache
设置为false
。 - 将
snapshot.managedPaths
设置为[]
。 - 停止手表,删除 Webpack 缓存,然后重新启动。
什么不起作用:
- 将
yalc.lock
添加到cache.buildDependencies
。 (它会导致重建,但仍使用缓存的 node_modules。)
是否有任何方法可以配置 Webpack 以便在 yalc.lock 发生更改时使其缓存的 node_modules 无效?
回答1
在这种情况下,您需要做的就是每当您对库进行更改并使用 yalc 发布它时,您还需要在 package.json
中更改其 version
。
如果您在每个 yalc publish --push
或 yalc push
上保持库的版本相同,无论您在库中进行什么更改,或者您使用完全不同的功能进行更新,在您重新启动服务器之前它都不会反映。它将继续使用那些高速缓存。
Webpack 在其 package.json
中查找每个依赖项的版本,如果找到相同的版本,它将使用缓存的资产进行构建,无论您在内部进行了什么更改。您将在导入的依赖项中找到更新的内容,但不会出现更改。
您必须更改包版本,以便 Webpack 可以跟踪更改并有效地使用缓存资产。包版本的更改将导致在不重新启动服务器的情况下使用更新代码的依赖项。
这是 Webpack 提高构建速度以尽可能快地为应用程序提供服务的方法之一。如果您在应用程序中使用带有 YALC、YARN 或 NPM 的任何本地包或库,请确保在每次发布时更新其版本。
随着库的变化而更改版本,而发布库是迄今为止唯一复杂的方法。
为了进一步了解,您可以查看 Webpack 如何使用依赖图来构建模块。