Webpack workbox网页包插件';s InjectManifest仅适用于“devtoolModuleFilenameTemplate:';文件://[绝对资源路径]'`
我想使用Webpack workbox网页包插件';s InjectManifest仅适用于“devtoolModuleFilenameTemplate:';文件://[绝对资源路径]'`,webpack,workbox,workbox-webpack-plugin,Webpack,Workbox,Workbox Webpack Plugin,我想使用workbox网页包插件来包含我自己的服务人员。但是,除非我使用输出选项devToolModuleFilenameTemplate,否则使用InjectManifest不起作用。 似乎库:“[name]”是与workbox网页包插件组合的失败配置。使用library:[name]“选项时,为什么必须设置devToolModuleFilenameTemplate 复制错误的最小项目 NPM依赖性 配置失败(webpack.common.js/webpack.prod.js) const
workbox网页包插件
来包含我自己的服务人员。但是,除非我使用输出选项devToolModuleFilenameTemplate
,否则使用InjectManifest
不起作用。
似乎库:“[name]”
是与workbox网页包插件组合的失败配置。使用library:[name]“
选项时,为什么必须设置devToolModuleFilenameTemplate
复制错误的最小项目
NPM依赖性
配置失败(webpack.common.js
/webpack.prod.js
)
const path=require('path');
const{InjectManifest}=require('workbox-webpack-plugin');
module.exports={
条目:{
测试:'./src/index.js'
},
输出:{
文件名:'[name].bundle.js',
path:path.resolve(uu dirname,'dist'),
库:“[name]”,//这是产生问题的行
干净:是的,
},
插件:[
新舱单({
swSrc:“./src/test offline worker.js”
}),
],
监视选项:{
忽略:['dist','**/node_modules']
},
模式:"发展",,
devtool:'源映射',//生产源映射
};
工作配置(webpack.dev.js
)
const{merge}=require('webpack-merge');
const common=require('./webpack.common.js');
const path=require('path');
module.exports=合并(公共{
输出:{//InjectManifest仅适用于此设置
devtoolModuleFilenameTemplate:'文件:///[绝对资源路径]'//映射到具有绝对文件路径而不是webpack://协议的源
},
});
配置失败的错误消息
更新(2021-05-18)
正如Jeff Posnick所解释的,问题在于缺少占位符字符串的替换[name]
。一种解决方案/解决方法是将输出.devtoolnespace
设置为所述的常量值。这里有两件事要做
首先,webpack
的sourcemap generator在设置为'[name]'
时似乎无法正常工作,与Workbox无关:
如果从“failing config”示例中注释掉InjectManifest
插件,则它将生成一个包含以下内容的sourcemap:
{“sources”:[“webpack://[name]/./src/index.js”],…}
我也不认为这是有效的。它不会触发编译错误,但不是预期的输出。这将是一个需要向webpack
团队提出的问题
其次,我想不出将InjectManifest
插件添加到生成库输出的编译中的有效用例。使用InjectManfest
创建的服务人员应该预先设置给定编译的输出,但同时,使用output.library
set的编译的输出意味着是一个可重用的库,其他人将从自己的代码库中引入,即适合在npm
上发布的东西。将服务人员运送到图书馆旁边或类似的地方是没有意义的。抱歉;我正在跟踪这个问题以及一些相关的问题,实际上,我已经重新讨论了这个问题,因为它似乎与GitHub问题中提到的一些其他问题不同。我们的网页构建包含多个网站。这些库用于打包网站所需的依赖项,并且仅在内部使用。有些网站需要缓存来支持不稳定的移动互联网连接。对于这些,我们使用InjectManifest
插件。但是,这些网站是最近才添加的,因此可能我们当前的网页包设置不再合适。如果有需要缓存的网站,您应该将InjectManifest
插件添加到这些网站的编译中(可能会消耗您的库
),不适用于生成库
输出的编译。
"devDependencies": {
"ts-loader": "^8.1.0",
"webpack": "^5.31.2",
"webpack-cli": "^4.6.0",
"webpack-merge": "^5.7.3",
"workbox-webpack-plugin": "^6.1.2"
}
PS C:\Users\USERNAME\dev\git\personal\webpack-problem> npm run build:prod
> webpack-problem@1.0.0 build:prod
> webpack --config webpack.prod.js
asset Test.bundle.js 618 bytes [compared for emit] (name: Test) 1 related asset
asset test-offline-worker.js 300 bytes [emitted] 1 related asset
./src/index.js 1 bytes [built] [code generated]
ERROR in Invalid URL: webpack://[name]/./src/test-offline-worker.js
webpack 5.31.2 compiled with 1 error in 104 ms
npm ERR! code 1
npm ERR! path C:\Users\USERNAME\dev\git\personal\webpack-problem
npm ERR! command failed
npm ERR! command C:\Windows\system32\cmd.exe /d /s /c webpack --config webpack.prod.js
npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\USERNAME\scoop\persist\nodejs\cache\_logs\2021-04-12T14_28_43_806Z-debug.log