Пытаюсь настроить Рабочий ящик в CRA без извлечения. Кому-нибудь удалось?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


После многочасовых проб и ошибок мне удалось получить рабочий ящик в CRA. Вот как я это сделал:
Во-первых, yarn add -D workbox-build
Затем создайте файл с именем build-sw.js в корневой папке с помощью:
const fs = require('fs-extra');
const pathmodule = require('path');
const workbox = require('workbox-build');
function build() {
const cwd = process.cwd();
const pkgPath = `${cwd}/node_modules/workbox-sw/package.json`;
const pkg = require(pkgPath);
const readPath = `${cwd}/node_modules/workbox-sw/${pkg.main}`;
let data = fs.readFileSync(readPath, 'utf8');
let path = `${cwd}/build/workbox-sw.js`;
console.info(`Writing ${path}.`);
fs.writeFileSync(path, data, 'utf8');
data = fs.readFileSync(`${readPath}.map`, 'utf8');
path = `${cwd}/build/${pathmodule.basename(pkg.main)}.map`;
console.info(`Writing ${path}.`);
fs.writeFileSync(path, data, 'utf8');
workbox
.injectManifest({
globDirectory: 'build',
globPatterns: ['**/*.{html,js,css,png,jpg,json}'],
globIgnores: ['sw-default.js', 'service-worker.js', 'workbox-sw.js'],
swSrc: './src/sw-template.js',
swDest: 'build/sw-default.js'
})
.then(_ => {
console.info('Service worker generated.');
});
}
try {
build();
} catch (e) {
console.info(e);
}
После этого создайте файл в src/sw-template.js с помощью:
(Имейте в виду, что в этом файле вы должны разместить свою собственную стратегию кеширования. Для получения дополнительной информации см. Документы)
workbox.setConfig({
debug: true
});
workbox.core.setLogLevel(workbox.core.LOG_LEVELS.debug);
workbox.precaching.precacheAndRoute([]);
workbox.skipWaiting();
workbox.clientsClaim();
workbox.routing.registerRoute('/', workbox.strategies.networkFirst());
Наконец, в src/registerServiceWorker.js поменяем:
- const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;
+ const swUrl = `${process.env.PUBLIC_URL}/sw-default.js`;
А в package.json поменяйте:
- "build": "react-scripts build && sw-precache --config=sw-precache-config.js'",
+ "build": "react-scripts build && yarn sw",
+ "sw": "node build-sw.js"
Надеюсь, поможет!
откуда определяется workbox файл src/sw-template.js?
Благодаря слиянию этот пиар, Create React App 2 теперь поддерживает Workbox из коробки, так как теперь он использует Плагины Workbox-Webpack внутри.
Взгляните на официальную документацию, чтобы узнать больше: https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app
Большое спасибо за ответ на свой вопрос. Это мне очень помогло. Мне нужно было удалить одинарную кавычку после
yarn swна последнем этапеpackage.json, чтобы заставить его работать.