Я работаю над проектом типа TypeScript, поэтому хочу написать работника службы в TypeScript, а затем скомпилировать его до ES5.Как скомпилировать сервисного работника в отдельное место из другого JS, используя Webpack?
У меня есть, что работать со следующими параметрами конфигурации:
// webpack.config.json
entry: {
app: './src/index.tsx',
sw: './src/service-worker/sw.ts',
},
output: {
filename: '[name].js',
path: __dirname + '/dist',
},
Это создает dist/app.js
и dist/sw.js
файл. Тем не менее, работники служб имеют ограничение, которое заключается в том, что они могут кэшировать только файлы, находящиеся в каталоге рабочего или под ним. Я хочу кэшировать корень (index.html
), поэтому я не могу его найти в каталоге dist
.
Есть ли наилучшая практика для решения этой проблемы? Я думаю о двух возможностях:
- Скомпилируйте сервисного работника в корневой каталог проекта. Мне не нравится эта опция, потому что тогда у моего корня проекта будет скомпилированный файл (
sw.js
) с кучей каталогов (например,src
иdist
) и конфигурационными файлами (например,package.json
иtsconfig.json
). - Как-то переместите
index.html
в другой каталог и подавайте его оттуда. Я не супер против этого, если это возможно.
Есть ли другие возможности? Если нет, то какой из этих двух звуков выглядит как лучшая идея, и как я могу настроить Webpack для решения этой проблемы?
Я не слышал об этом ограничении, не могли бы вы его привести? – zero298
Вы можете сохранить сервисного работника там, где хотите его структурно, а затем на своем сервере добавить явную конечную точку для рабочего на корневом уровне. Я предполагаю, что это ограничение навязывается стороне клиента, и если вы обслуживаете работника по адресу 'https: // my.cool.domain/service-worker.js', клиент не будет ** фактически ** знать, что это похоронен глубоко в каталоге где-то. – zero298