mar*_*rix 5 javascript webpack service-worker progressive-web-apps
我正在编写 PWA 应用程序。我使用的是我正在使用的模板(Vue.js PWA 模板)中的默认 Service Worker,但现在我决定从头开始编写自己的 Service Worker。我已将它 ( service-worker.js
)放入static
文件夹中,因为我想要它的静态名称 - 我不想每次都更改名称(构建)。
在这个特定的 Service Worker 中,我想使用 packagename
和version
,以便我可以很好地生成缓存 ID。
所以我想实现这样的目标:
./package.json:
{
"name": "my.app",
"version": "1.0.0",
...
}
Run Code Online (Sandbox Code Playgroud)
./static/service-worker.js:
var CACHE_ID = 'PACKAGE_NAME-vPACKAGE_VERSION';
// ...
Run Code Online (Sandbox Code Playgroud)
./build/service-worker.js:
var CACHE_ID = 'my.app-v1.0.0';
Run Code Online (Sandbox Code Playgroud)
这些./build/service-worker.js
显示了我想要实现的目标。
我已尝试使用以下配置的https://www.npmjs.com/package/string-replace-loader:
{
test: /service-worker\.js$/,
loader: 'string-replace-loader',
options: {
multiple: [
{
search: 'PACKAGE_NAME',
replace: packageConfig.name
},
{
search: 'PACKAGE_VERSION',
replace: packageConfig.version
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
但据我所知,放置在其中的文件static
不是模块(我是对的吗?),因此这些文件不会被module.rules
.
我将非常感谢您的帮助和/或指导我如何解决这个问题。
好吧,我终于明白了。我已经使用过copy-webkit-plugin
并且可以转换:
plugins: [
new CopyWebpackPlugin([
{
from: 'static/service-worker.js',
to: './service-worker.js',
transform (content) {
var parsed = content.toString();
var transformation = [
{
search: 'PACKAGE_NAME',
replace: packageConfig.name
},
{
search: 'PACKAGE_VERSION',
replace: packageConfig.version
}
];
for(var i = 0; i < transformation.length; i++) {
parsed = parsed.replace(transformation[i].search, transformation[i].replace);
}
return Buffer.from(parsed, 'utf8');
}
}
])
]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
696 次 |
最近记录: |