我刚刚为我的项目设置了服务人员。我的webpack.config.js
如下所示...
const path = require('path');
const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const WorkboxPlugin = require('workbox-webpack-plugin');
module.exports = {
entry: {
app: './src/index.js',
worker: './src/worker.js',
},
module: {
rules: [
{
test: /\.(js|jsx)$/,
exclude: /node_modules/,
use: ['babel-loader']
}
]
},
resolve: {
extensions: ['*', '.js', '.jsx']
},
plugins: [
new CleanWebpackPlugin(),
new webpack.ProgressPlugin(),
new HtmlWebpackPlugin({
title: 'PWA'
}),
new WorkboxPlugin.GenerateSW({
swDest: 'sw.js',
clientsClaim: true,
skipWaiting: true,
}),
new webpack.HotModuleReplacementPlugin()
],
output: {
filename: '[name].bundle.js',
path: path.resolve(__dirname, 'dist'),
},
devServer: {
contentBase: './dist',
hot: true
}
};
我的package.json
设置为...
"scripts": {
"start": "webpack-dev-server --config ./webpack.config.js --mode development",
"test": "echo \"Error: no test specified\" && exit 1",
"build": "webpack"
},
通过将以下代码添加到我的index.js
文件中,我能够成功注册工作人员...
if ('serviceWorker' in navigator) {
window.addEventListener('load', () => {
navigator.serviceWorker.register('/sw.js').then(registration => {
console.log('SW registered: ', registration);
}).catch(registrationError => {
console.log('SW registration failed: ', registrationError);
});
});
}
但是,现在我不知道在哪里定义端点。我想在我的应用程序中的某处定义以下代码,但我不知道如何确保调用端点...
self.addEventListener('fetch', function(event) {
console.log("Caught a fetch!");
event.respondWith(new Response("Hello world!"));
});
如果我运行npm build
,则会在sw.js
文件夹中生成dist
文件,因此我尝试在其中添加端点。但是,当我随后运行npm start
时,该端点永远不会被调用,并且文件也消失了(我猜它正被捆绑在某个地方)。有人可以向我解释我做错了什么吗?我需要在哪里定义端点以及如何命名它们?
答案 0 :(得分:0)
我可以通过将webpack.config.js
更改为使用InjectManifest
...来使它工作...
new WorkboxPlugin.InjectManifest({
swSrc: "./src/src-sw.js",
swDest: "sw.js"
})
所以现在在src-sw.js
中,我添加了以下内容...
self.addEventListener("install", event => {
console.log("Installed");
});
我能够在控制台中获取日志。