javascript - Webpack:将变量注入(inject)静态 service-worker.js

标签 javascript webpack service-worker pwa

我正在编写 PWA 应用程序。我正在使用我正在使用的模板(Vue.js PWA 模板)中的默认 Service Worker,但现在我决定从头开始编写我自己的。我已将它 ( service-worker.js ) 放入 static文件夹,因为我想为其命名 - 我不想每次都更改名称(构建)。

在这个特定的 Service Worker 中,我想使用包 nameversion ,这样我就可以很好地生成缓存 ID。

所以我想实现这样的目标:

./package.json :
{ "name": "my.app", "version": "1.0.0", ... }
./static/service-worker.js : var CACHE_ID = 'PACKAGE_NAME-vPACKAGE_VERSION'; ...
./build/service-worker.js : var CACHE_ID = 'my.app-v1.0.0'; ./build/service-worker.js显示我想要实现的目标。

我试过https://www.npmjs.com/package/string-replace-loader具有以下配置:

  {
    test: /service-worker\.js$/,
    loader: 'string-replace-loader',
    options: {
      multiple: [
        {
          search: 'PACKAGE_NAME',
          replace: packageConfig.name
        },
        {
          search: 'PACKAGE_VERSION',
          replace: packageConfig.version
        }
      ]
    }
  }

但据我了解,文件位于 static不是模块(对吗?),所以 module.rules 不会检查这些.

我将非常感谢帮助和/或指导我如何解决这个问题。

最佳答案

好的,我终于明白了。我用过copy-webkit-plugin并且有可能改变:

  plugins: [
    new CopyWebpackPlugin([
      {
        from: 'static/service-worker.js',
        to: './service-worker.js',
        transform (content) {
          var parsed = content.toString();
          var transformation = [
            {
              search: 'PACKAGE_NAME',
              replace: packageConfig.name
            },
            {
              search: 'PACKAGE_VERSION',
              replace: packageConfig.version
            }
          ];

          for(var i = 0; i < transformation.length; i++) {
            parsed = parsed.replace(transformation[i].search, transformation[i].replace);
          }

          return Buffer.from(parsed, 'utf8');
        }
      }
    ])
  ]

关于javascript - Webpack:将变量注入(inject)静态 service-worker.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51057862/

相关文章:

javascript - 在 ES6 Promise 中,我应该在解析/拒绝之前使用 return 吗?

javascript - ServiceWorker 源头

javascript - 如何设置基本的普通 JavaScript if 语句来设置 cookie

javascript - 追加获取的 ejs 项目

javascript - jQuery 相对于其他 JavaScript 库有什么优势?

javascript - 有没有办法从 webpack 获取依赖树?

webpack - 使用 Webpack 开发服务器进行 301 重定向

javascript - ES6 代码不适用于 jQuery

javascript - 具有多个缓存的 Service Worker

javascript - 如何用 ServiceWorker 生命周期替换 appcache 生命周期事件