javascript - 如何使用 Webpack 将服务 worker 编译到与其他 JS 不同的位置?

标签 javascript typescript webpack service-worker

我正在开发一个 TypeScript 项目,所以我希望能够用 TypeScript 编写一个 service worker,然后将其编译为 ES5。

我已经使用以下配置选项进行操作:

// webpack.config.json
entry: {
  app: './src/index.tsx',
  sw: './src/service-worker/sw.ts',
},

output: {
  filename: '[name].js',
  path: __dirname + '/dist',
},

这将创建一个 dist/app.jsdist/sw.js 文件。但是,service worker 有一个限制,那就是它们只能缓存 service worker 目录中或目录下的文件。我想缓 stub (index.html),所以我不能将它放在 dist 目录中。

是否有解决此问题的最佳实践?我在想两种可能性:

  1. 将service worker编译到项目根目录。我不喜欢这个选项,因为那样我的项目根目录将有一个编译文件 (sw.js) 和一堆目录(例如 srcdist) 和配置文件(例如 package.jsontsconfig.json)。
  2. 以某种方式将 index.html 移动到另一个目录并从那里提供它。如果可能的话,我并不反对。

还有其他可能吗?如果不是,这两个听起来哪个更好,我将如何配置 Webpack 来解决这个问题?

最佳答案

您有多种选择,一种是将 Service Worker 设置为静态内容,指向您需要的端点。
使用 express:

app.use('/sw.js', Express.static(join(__dirname, '../dist/sw.js'),staticOptions));

其他选项是使用 proxy .
如果您需要对请求进行更多控制,甚至可以创建一个快速中间件

app.use((req, res, next) => {

  //if req.url is /dis/sw.js
  //rewrite the URL to /sw.js
  req.url = newUrl;

  next();
});

这些是一些选项,希望这有助于澄清。

关于javascript - 如何使用 Webpack 将服务 worker 编译到与其他 JS 不同的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40900068/

相关文章:

webpack - 在 Webpack 中使用 less-plugin-glob

php - 如何设置:hover on a li(A) when hover an other li(B)

javascript - 自定义 jquery 选择器属性未在模拟器中触发

javascript - 如何使用 jquery.floathead 创建 float 标题?

typescript - 在 typescript 中使用 import 语句时无法访问 ethers.js 提供程序

javascript - 将 React 组件转换为 Typescript?

javascript - Webpack、IE8 和 ES6 模块

javascript - 'return' 没有输出所有结果

node.js - 如何在 Typescript 的方法装饰器上创建编译错误?

javascript - 处理与 WebPack 连接有关的文件顺序?