【问题标题】:Svelte: Unable to get imported unused CSS purgedSvelte:无法清除导入的未使用 CSS
【发布时间】:2021-04-19 18:58:30
【问题描述】:

我尝试删除从外部 css 文件导入的未使用 css,但未成功。

我尝试了很多组合都徒劳无功,每次运行构建脚本时都会得到一个巨大的 bundle.css

这是我到目前为止尝试过的所有内容的列表:

我很确定我做错了什么,但老实说我不知道​​是什么。

如果有人知道如何解决这个问题,我很想听听一些反馈。

简单的回购示例:https://github.com/mgrisole/svelte-playground

【问题讨论】:

    标签: svelte rollup-plugin-postcss


    【解决方案1】:

    您需要按照以下步骤操作:

    1. rollup.config.js中导入rollup-plugin-postcss
    import postcss from 'rollup-plugin-postcss';
    
    1. 将相关部分(rollup.config.js 的第 41-56 行)替换为:
    svelte({
      preprocess: sveltePreprocess({ postcss: true }),
      compilerOptions: {
        dev: !production,
        css: css => { css.write('bundle.css') },
      },
      ...(production && { emitCss: false }),
    }),
    production
      ? postcss({ extract: true, minimize: true })
      : css({ output: 'bundle.css' }),
    
    1. postcss.config.js中配置purgecss:
    const purgecss = require('@fullhuman/postcss-purgecss')({
      content: ['./**/**/*.html', './**/**/*.svelte'],
      whitelistPatterns: [/svelte-/],
      defaultExtractor: content => content.match(/[\w-/:]+(?<!:)/g) || []
    });
    
    const isProduction = !process.env.ROLLUP_WATCH && !process.env.LIVERELOAD
    
    module.exports = {
      plugins: [
        ...(isProduction ? [purgecss] : [])
      ]
    };
    

    【讨论】:

    • 非常感谢您的快速回复,不幸的是,在执行构建脚本后,我最终得到了一个几乎空的 bundle.css。我根据您的建议创建了一个分支,您知道我是否遗漏了什么:github.com/mgrisole/svelte-playground/tree/alternative-conf
    • 您应该删除或注释掉 css({ output: 'bundle.css' })(第 56 行)。这现在在第 52 行处理,它只在开发模式下运行。
    • 确实如此,非常感谢 mutil 的宝贵帮助!
    • 我认为我们应该将 whitelistPatterns 更改为安全列表,它似乎自 v3 以来已更改 github.com/FullHuman/purgecss/releases/tag/v3.0.0 但似乎不需要它,如果我删除异常 svelte 的选择器不会被删除。不过,我这边肯定需要更多调查。
    猜你喜欢
    • 2018-09-15
    • 2021-09-08
    • 2019-10-22
    • 2021-04-01
    • 2019-11-14
    • 2020-12-27
    • 2019-01-10
    • 2020-07-03
    • 1970-01-01
    相关资源
    最近更新 更多