Webpack 配置cache.buildDependencies可用于列出文件或目录,这样,如果它们发生更改,则基于文件系统的 Webpack 构建缓存将失效。
持久缓存指南对此进行了深入记录。
该文档说默认情况下包含 webpack lib。文档还展示了如何包含webpack.config.js文件本身。
这是一个愚蠢的问题吗node_modules?他们也没有提到类似的事情yarn.lock。在某些类型的工作区中,库依赖项可能会显示为node_modules符号链接 - 在这些情况下,依赖项可以在开发过程中并行更新。这些更改应该会使这些 webpack 构建缓存无效,对吗?
在 webpack@5.72.0 (目前最新的)上,我开始看到:
TypeError: Cannot read property 'buildMeta' of undefined
at HarmonyImportSpecifierDependency._getEffectiveExportPresenceLevel (/src/project/node_modules/.pnpm/webpack@5.72.0_webpack-cli@4.9.2/node_modules/webpack/lib/dependencies/HarmonyImportSpecifierDependency.js:165:43)
at HarmonyImportSpecifierDependency.getWarnings (/src/project/node_modules/.pnpm/webpack@5.72.0_webpack-cli@4.9.2/node_modules/webpack/lib/dependencies/HarmonyImportSpecifierDependency.js:176:32)
at Compilation.reportDependencyErrorsAndWarnings (/src/project/node_modules/.pnpm/webpack@5.72.0_webpack-cli@4.9.2/node_modules/webpack/lib/Compilation.js:3132:24)
at /src/project/node_modules/.pnpm/webpack@5.72.0_webpack-cli@4.9.2/node_modules/webpack/lib/Compilation.js:2729:28
Run Code Online (Sandbox Code Playgroud)
顶部框架是(源代码在这里):
/**
* @param {ModuleGraph} moduleGraph module graph
* @returns {number} effective mode
*/
_getEffectiveExportPresenceLevel(moduleGraph) {
if (this.exportPresenceMode !== ExportPresenceModes.AUTO)
return this.exportPresenceMode;
return moduleGraph.getParentModule(this).buildMeta.strictHarmonyModule
? ExportPresenceModes.ERROR
: ExportPresenceModes.WARN;
}
Run Code Online (Sandbox Code Playgroud)
为什么会moduleGraph.getParentModule(this)是未定义的?一般情况下应该怎样预防呢?
this我从里面倒出来_getEffectiveExportPresenceLevel,得到:
HarmonyImportSpecifierDependency {
_parentModule: undefined,
_parentDependenciesBlock: undefined,
_parentDependenciesBlockIndex: -1,
weak: false,
optional: false,
_locSL: 1,
_locSC: 12241,
_locEL: 1,
_locEC: 12242,
_locI: …Run Code Online (Sandbox Code Playgroud) webpack ×2