javascript - 如何在开发模式下使用 service-worker
问题描述
我正在使用create-react-app 4
和cra-template-pwa
(来源)
默认情况下,看起来 service-worker 仅用于生产构建:
export function register(config) {
if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {
这对我来说是个问题,因为构建生产构建需要很长时间,因此我想在开发构建时注册服务工作者。为了得到这个结果,我删除了支票process.env.NODE_ENV === 'production'
和另一张isLocalhost
支票。
现在,就像我希望的那样,即使是调试版本也在尝试加载www.example.com/service-worker.js 。
现在的问题是,这个文件在里面src
。这是有道理的,因为它使用进口,你可以在这里看到。但正因为如此,文件本身无法从网络浏览器访问,因此www.example.com/service-worker.js
肯定无法访问。
将文件复制到公共也不起作用
未捕获的语法错误:无法在模块外使用 import 语句
恐怕我还没有真正理解哪一部分属于 JS,哪一部分属于 NodeJS,哪一部分属于 reactjs,哪一部分属于 CRA。
所以我现在的问题是:
有没有办法获得“翻译”的“路径” service-worker.js
(进口后,..)?
解决方案
首先将 craco 添加到 react 项目craco
然后使用以下文件创建自定义 craco 插件
serviceWorkerRegistration.js
change this line ===> if ("process.env.NODE_ENV === 'production' && serviceWorker" in navigator)
to ===> if ("serviceWorker" in navigator)
craco.config.js
const cracoServiceWorkerConfig = require("./cracoServiceWorkerConfig");
module.exports = {
plugins: [{ plugin: cracoServiceWorkerConfig }],
};
cracoServiceWorkerConfig.js
const WorkboxWebpackPlugin = require("workbox-webpack-plugin");
const path = require("path");
module.exports = {
overrideWebpackConfig: ({ webpackConfig, cracoConfig, pluginOptions, context: { env, paths } }) => {
const isEnvDevelopment = env === "development";
if (isEnvDevelopment) {
const newConfig = {
...webpackConfig,
plugins: [
...webpackConfig.plugins,
isEnvDevelopment &&
new WorkboxWebpackPlugin.InjectManifest({
swSrc: path.resolve(__dirname, "src/service-worker.js"),
dontCacheBustURLsMatching: /\.[0-9a-f]{8}\./,
exclude: [/\.map$/, /asset-manifest\.json$/, /LICENSE/],
maximumFileSizeToCacheInBytes: 5 * 1024 * 1024,
}),
],
};
return newConfig;
} else {
return webpackConfig;
}
// Always return the config object.
},
};
推荐阅读
- javascript - 如何使用基于服务器的 groupBy 数据并在 ag-grid 中显示 - angular
- python - 关于 Scipy 中 Levenberg-Marquadt 实现的几个问题
- java - 解释 synchronized() 内部的 Commons Lang 代码?
- php - 预览页面 图像方向
- reactjs - 如何使用 react-sortable-hoc 访问 refs,withref
- json - 构建重复值的颠簸转换
- python - 如何确定 dateparser.search.search_dates() 是否返回日期、时间或日期时间
- python - Python PDF 文件文本提取
- javascript - 我对使用 javascript 将城市列表加载到下拉列表中有些困惑
- python - python中的语音翻译器