Workbox Webpack插件从预缓存清单中排除文件夹

时间:2019-03-31 06:55:42

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

我正在将Workbox Webpack插件与vue cli 3配合使用,并且希望将文件夹中的文件排除在添加到预缓存清单之外。

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

/ src
  /资产
    / css
    / shell
    file1.svg
    file2.svg
    file3.svg
    / svg
    file4.svg
    file5.svg
    file6.svg

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

即使不是相同的问题,我也遇到了类似的问题,在盯着这里的文档看了一会儿之后,我就能弄出答案:

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

我想自动生成precache-manifest,但要排除特定文件夹和特定文件名。所以,我的vue.config.js现在是这样的:

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

排除/包含属性是正则表达式或字符串的数组。您的 exclude 表达式提取了所有 svg 文件的原因仅仅是因为您的正则表达式中,您要查找以 .svg 结尾的任何内容。

您可以尝试如下操作:

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

请记住,由于我们指定了包含,因此我们无需排除,因为Webpack仅会在包含下获取您要求的内容>。但是,为了得到这个答案,我在上面的示例中同时添加了 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,并尝试与您的用例匹配的 include exclude 表达式。这是一个示例:

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

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

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