Плагин workbox webpack 4 не может предварительно кэшировать ресурсы, не относящиеся к веб-пакету

Я хочу предварительно кэшировать изображения для PWA, используя эта документация.

Я пробовал несколько итераций, но у меня проблемы с шариками.

Вот один из примеров кода плагина на моем webpack.config.js:

     new InjectManifest({
        swSrc: './client/sw-src.js',
        swDest: '../sw.js',
        exclude: [/\.twig$/],
        globPatterns: ['/img/*.{svg,jpg,webp}']
    }),

Структура каталогов следующая:

/public
    /dist => there's where the 'regular' webpack assets are
    /img => directory I want to add to precache on top of /dist
    ...

Я также пытался использовать globDirectory, но безуспешно.

Это сработает, если я вручную добавлю приведенный ниже код в свой файл sw-src.js, но это не идеально и подвержено ошибкам.

 workbox.precaching.precache([
'/img/circles.svg',
'/img/concept-1.jpg',
......
]);

workbox.precaching.addRoute();

Не могли бы вы предоставить журналы?

abielita 28.12.2018 15:44
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
2
1
256
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Стоит упомянуть, что Workbox работает с активами webpack, которые были добавлены в выходные данные компиляции. Возможно, у вас есть файлы в контексте сборки, например изображения в вашем репозитории, но они действительно должны быть обязательными или иным образом добавляться к выходным данным.

Один из простых способов добиться этого - использовать copy-webpack-plugin. Это действительно полезно при переходе на веб-пакет из других инструментов сборки или когда вы динамически создаете URL-адреса ресурсов и не используете загрузчики веб-пакетов.

Обновлено: добавление настройки с фактическим решением:

Это новая настройка каталога:

 /assets/img/  => origin directory for copy-webpack-plugin
 /public
   /dist => there's where the 'regular' webpack assets are
   /img => destination directory for copy-webpack-plugin

И фактический код для copy-webpack-plugin, а также настройка clean-webpack-plugin

    new CleanWebpackPlugin(['public/dist/*.*', 'public/img/*.*']),
    new CopyWebpackPlugin([
        { from: './assets/img/', to: '../img' },
      ]),

Ваше решение сработало. Я взял на себя смелость отредактировать ваш ответ, чтобы добавить реальный код, ожидающий утверждения. Большое спасибо.

BernardA 29.12.2018 09:35

Обратите внимание, что код globPatterns: ['/img/*.{svg,jpg,webp}'] в плагине InjectManifest больше не нужен.

BernardA 29.12.2018 14:32

Другие вопросы по теме