Ric*_*nho 5 javascript reactjs webpack service-worker
我正在使用 Webpack 5,并且我想要一个 Service Worker,它可以在不访问网络的情况下拦截获取请求并在本地返回响应。我还希望能够在 Service Worker 中导入 npm 模块。我曾经为此使用一个名为serviceworker-webpack-plugin的库,但它不再维护,(并且在我使用时抛出错误)。Webpack 文档建议使用 Workbox,但据我所知,这似乎只是用于在 Service Worker 中缓存资产。有人能告诉我 2020 年使用 Webpack 5 创建 Service Worker 的正确方法是什么吗?
pfg*_*pfg 11
将 Service Worker 添加到您的 webpack.config.js 条目字段
entry: {
'app': "./src/index.js",
'service-worker': "./src/service-worker.ts",
},
output: {
filename: "[name].js",
},
Run Code Online (Sandbox Code Playgroud)
这将发出dist/app.js和dist/service-worker.js,并且可以在两者中导入内容。
serviceworker-webpack-plugin还为 serviceworker 提供了一种查看应缓存的所有捆绑文件列表的方法,但该功能无法直接使用,需要制作 webpack 插件才能获取。
Ifa*_*uki -2
不要把它搞得太复杂。
只需 2 步即可让软件工作。创建一个sw并注册它。
创建一个 .js 文件,sw.js并在其中写入:
self.addEventListener('fetch', function (event) {
event.respondWith(
caches.open('mysite-dynamic').then(function (cache) {
return cache.match(event.request).then(function (response) {
var fetchPromise = fetch(event.request).then(function (networkResponse) {
cache.put(event.request, networkResponse.clone());
return networkResponse;
});
return response || fetchPromise;
});
}),
);
});
Run Code Online (Sandbox Code Playgroud)
这就是重新验证时过时的方法
现在就注册吧。
if ('serviceWorker' in navigator) {
window.addEventListener('load', function() {
navigator.serviceWorker.register('/sw.js').then(function(registration) {
// Registration was successful
console.log('ServiceWorker registration successful with scope: ', registration.scope);
}, function(err) {
// registration failed :(
console.log('ServiceWorker registration failed: ', err);
});
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1626 次 |
| 最近记录: |