我正在尝试通过next-offline使用Workbox正确实现 Service Worker 。为了创建一个自定义服务工作者,我使用了workbox-webpack-plugin 的InjectManifest类。我在设置开发环境以运行“now dev”命令时遇到问题。
我目前的尝试在这里:https ://github.com/awb305/nextjs-service-worker-workbox 。
这是我的问题:
- 安装失败
运行“now dev”时,我的 SW 将无法安装和记录:
Uncaught (in promise) bad-precaching-response: The precaching request for 'http://localhost:3000/public/service-worker.js.map?__WB_REVISION__=a7274c8542abc1c5ddaad6ca132a250e' failed with an HTTP status of 404.
at PrecacheController._addURLToCache (http://localhost:3000/service-worker.js:956:13)
at async Promise.all (index 0)
at async PrecacheController.install (http://localhost:3000/service-worker.js:874:5)
除非我在 now.json 文件中添加以下重定向:
{
"src": "/public/(.*)",
"status": 301,
"headers": { "Location": "/" }
},
{
"src": "/_next/static/development/pages/next/dist/pages/(.*)",
"status": 301,
"headers": { "Location": "/" }
}
这解决了 bad-precaching-reponse,但是我还没有在其他地方看到这个实现,所以我对这种方法没有信心。确保正确安装软件的标准方法是什么?
- Webpack 警告
在我的第一个问题中使用我的修复程序运行“now dev”时,我将收到以下警告:
InjectManifest has been called multiple times, perhaps due to running webpack in --watch mode. The precache manifest generated after the first call may be inaccurate! Please see https://github.com/GoogleChrome/workbox/issues/1790 for more information.
目前我唯一的解决方法是在我的 next.config.js中切换generateInDevMode配置。如果我想安装一个新的服务工作者,我必须使用generateInDevMode: true运行一次“now dev” 。然后我杀死“now dev”并设置generateInDevMode: false以防止显示先前的警告。理想情况下,我宁愿不这样做。
我尝试将我的 webpack 配置设置为:
webpackDevMiddleware(config) {
// Fixes npm packages that depend on `fs` module
config.node = {
fs: "empty"
};
config.watch = false;
return config;}
然而,这并没有消除警告。
我很难找到这个错误。反正有更多的错误浮出水面吗?我是否错误地设置了 webpack watch 配置?