【问题标题】:workbox webpack plugin exclude folder from precache manifest工作箱 webpack 插件从预缓存清单中排除文件夹
【发布时间】:2019-08-21 15:23:58
【问题描述】:

我正在使用带有 vue cli 3 的 workbox webpack 插件,我想排除文件夹中的文件被添加到预缓存清单中。

在下面查看我当前的文件结构

/src
/资产
/css
/壳
文件1.svg
文件2.svg
文件3.svg
/svg
文件4.svg
文件5.svg
文件6.svg

我想在我的预缓存清单中包含 shell 文件夹中的文件,但我不想在 svg 文件夹中包含这些文件。

我尝试在 vue.config.js 中使用 workboxOptionsglobIgnoresexclude 选项文件,但我没有得到想要的结果。

当我尝试globIgnores: ['src/assets/svg/*'] 时,没有任何反应,因为所有文件都包含在内

当我尝试exclude: [/\.svg$/] 时,它排除了两个文件夹中的 svg 文件。

我尝试根据以下内容更改排除选项的匹配模式,但它也不起作用:

exclude: [/^file4.*\.svg$/,
          /^file5.*\.svg$/,
          /^file6.*\.svg$/]

【问题讨论】:

    标签: vue.js webpack vue-cli-3 workbox workbox-webpack-plugin


    【解决方案1】:

    我遇到了类似的问题,如果不一样的话,并且在盯着这里的文档看了一会儿后能够梳理出一个答案:

    https://developers.google.com/web/tools/workbox/modules/workbox-webpack-plugin#generateSW-exclude

    我想自动生成预缓存清单,但排除特定文件夹以及特定文件名。所以,我的 vue.config.js 现在是这样的:

    pwa: {
      workboxOptions: {
        exclude: [
          /index\.html$/,
          /client-config\.js$/,
          /^.*folder-to-exclude\/.*$/,
        ]
      }
    }
    

    exclude/include 属性是正则表达式或字符串的数组。您的 exclude 表达式获取所有 svg 文件的原因很简单,根据您的正则表达式,您正在寻找以 .svg 结尾的任何内容.

    你可以试试这样的:

    module.exports = {
        pwa: {
            appleMobileWebAppCapable: 'yes',
            appleMobileWebAppStatusBarStyle: 'black',
            workboxOptions: {
                include: [
                    /^.*shell\/.*$/,
                ],
                exclude: [
                    /^.*svg\/.*$/,
                ]
            }
        }
    };
    

    请记住,由于我们指定了 include,因此我们不需要 exclude,因为 Webpack 只会抓取您在 include 下要求的内容>。但是,为了得到这个答案,我在上面的示例中添加了 include/exclude

    在不反复构建的情况下测试所有这些东西的一种方法是转到文件夹的根目录,在我的例子中是 public 文件夹,然后运行以下命令:

    find .
    

    这应该递归地获取所有文件/文件夹的列表并返回如下内容:

    .
    ./svg
    ./svg/safari-pinned-tab.svg
    ./svg/safari-pinned-tab-2.svg
    ./svg/safari-pinned-tab-1.svg
    ./favicon.ico
    ./index.html
    ./shell
    ./shell/android-chrome-192x192.png
    ./shell/android-chrome-512x512.png
    ./img
    ./img/icons
    ./img/icons/favicon-16x16.png
    ./img/icons/safari-pinned-tab.svg
    ./img/icons/apple-touch-icon-120x120.png
    ./img/icons/android-chrome-192x192.png
    ./img/icons/apple-touch-icon.png
    ./img/icons/apple-touch-icon-152x152.png
    ./img/icons/apple-touch-icon-180x180.png
    ./img/icons/apple-touch-icon-76x76.png
    ./img/icons/android-chrome-512x512.png
    ./img/icons/msapplication-icon-144x144.png
    ./img/icons/mstile-150x150.png
    ./img/icons/apple-touch-icon-60x60.png
    ./img/icons/favicon-32x32.png
    ./robots.txt
    

    然后,获取该输出并前往 regex101.com 并尝试与您的用例匹配的 includeexclude 表达式。这是一个例子:

    https://regex101.com/r/nzEwCz/2/

    我发现这只会帮助缩小表达式的范围,您需要在 IDE 中对其进行细化。我知道这是一个相当冗长的答案,如果您有任何问题,请在下方评论。

    注意: Windows 框下的表达式可能不同,请参阅此问题/答案:https://stackoverflow.com/a/38190159/128795

    【讨论】:

      猜你喜欢
      • 2019-05-26
      • 2022-10-07
      • 2019-12-10
      • 1970-01-01
      • 2014-07-25
      • 2020-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多