Я пытаюсь настроить веб-работника в проекте React / Typescript, который использует Gulp с Browserify для сборки. Это оказывается довольно трудным делом. Проблема, с которой я столкнулся на данный момент, заключается в том, что на этапе компиляции машинописи для основного приложения делается попытка включить код веб-работника. Это терпит неудачу, потому что для машинописи веб-работника нужны другие типы, чем для остального кода - типы DOM не допускаются. Но я не понимаю, как этот код включается в компиляцию вообще. Что касается моего понимания browserify, оно рассматривает зависимости, указанные в файле root, и строит оттуда дерево зависимостей. Это дерево никогда не должно ссылаться на файл веб-работника и его код, так что происходит?
Код Gulp:
const compileMainScript = (done) => {
log('Compiling script for my-app');
return browserify({
basedir: '.',
debug: mode === 'dev',
entries: ['src/my-app/my-app.tsx'],
cache: {},
packageCache: {},
})
.plugin(tsify)
.bundle()
.pipe(source('app.js'))
.pipe(gulp.dest('*path-to-destination-folder*'))
.on('error', err => {
console.error(err.toString());
done(err);
});
};
(Упрощенная) структура каталогов выглядит примерно так:
-src
-workers
my-worker.ts
-my-app
my-app.tsx
Таким образом, вы можете видеть, что создаваемое приложение (my-app
) и веб-работник находятся в путях на одном уровне - даже если код веб-рабочего находится внутри папки my-app
. Как browserify даже может увидеть это? Обратите внимание, что в my-app
нет ссылок на my-worker
. Я могу произвольно изменить имя папки или файла рабочего файла, и возникает та же проблема.