当前位置: 首页 > 知识库问答 >
问题:

vue-cli - purgecss-webpack-plugin 打包删除无用样式导致输出 0KB的css空文件,怎么输出的时候消除空文件?

爱炯
2024-03-26

vue-cli配置css的tree shaking,使用了purgecss-webpack-plugin这个插件,具体配置如下:

const PurgecssWebpackPlugin = require('purgecss-webpack-plugin')new PurgecssWebpackPlugin({    paths: glob.sync([            // 需要编译的文件夹路径            path.join(__dirname, './src/index.html'),                                          path.join(__dirname, './**/*.vue'),            path.join(__dirname, './src/**/*.js')     ])}]

打包之后,会出现,输出的一些css文件是0KB,应该怎么办呢?

尝试过使用splitChunks分包,但是没有效果,能不能配置输出的时候就删除这些空的文件呢?

共有1个答案

祁均
2024-03-26

purgecss-webpack-plugin 插件的目的是删除未使用的 CSS,如果它删除了所有 CSS,那么输出文件可能变成 0KB。这通常是因为没有 CSS 规则被实际使用,或者 purgecss-webpack-plugin 配置过于严格。

要消除这些空文件,你可以在 webpack 配置中使用 MiniCssExtractPlugin,该插件允许你控制提取的 CSS 文件的输出。你可以设置一个选项来忽略空文件。

下面是一个如何配置 MiniCssExtractPlugin 以忽略空文件的示例:

const MiniCssExtractPlugin = require('mini-css-extract-plugin');module.exports = {  // ... 其他 webpack 配置  plugins: [    new MiniCssExtractPlugin({      filename: '[name].[contenthash].css',      ignoreOrder: true, // 忽略 CSS 中的顺序问题      chunkFilename: '[id].[contenthash].css',      onEmit: (assets, emission) => {        // 遍历所有 CSS 文件        Object.keys(assets).forEach(asset => {          if (asset.endsWith('.css') && assets[asset].source().length === 0) {            // 如果文件是空的,则从输出中删除它            delete assets[asset];          }        });        // 继续正常的发射过程        return emission;      },    }),    // ... 其他插件  ],  // ... 其他 webpack 配置};

在这个配置中,onEmit 钩子函数在 webpack 发射阶段被调用,它允许你修改输出文件。在这个函数中,我们检查每个 CSS 文件,如果它是空的(即文件内容为 0 字节),我们就从输出中删除它。

请注意,这种方法可能不是最佳解决方案,因为它会阻止空文件被输出。更好的方法是检查为什么 purgecss-webpack-plugin 删除了所有 CSS,并调整其配置或确保至少有一些 CSS 被实际使用。

 类似资料:
  • 我正在尝试使用file writer写入文件,但值为空: 这是错误按摩: 我希望我说的很清楚,我已经尽力了。。请帮帮我。

  • 我有如下所示的大型数据矩阵: 前两列是ID,总是整数,其余6列是每个ID的2对(X,Y,Z)坐标(浮点数)。 有人知道如何让fprintf在移除无关紧要的尾随零后只留一个空格吗?使用fprintf很好,因为我不需要任何循环,当你有几千个矩阵要写出来时,如果我必须在循环中做一些检查,我想这会很慢?

  • 我有一个列的值需要删除。数据如下所示: 我只需要抓取字符串的第一部分,所需的输出是、等等。我的代码如下所示: 它返回的最后有空格,我如何修改查询,使它返回的值没有空格?

  • 我正在编写文本输出文件,使用XSL读取XML文件。 在这里,我试图检查源XML中是否有特定的内容,如果可用,则将该内容写入文件。 目前,我正在使用java读取创建的空文件并显式删除它们。诚恳地感谢。

  • 问题内容: 我正在尝试在我的PHP CLI应用程序上使用“实时”进度指示器。而不是输出为 我宁愿清除它,也只显示最新结果。system(“ command \ C CLS”)不起作用。也没有ob_flush(),flush()或我发现的其他任何东西。 我正在运行Windows 7 64位旗舰版,我注意到命令行输出是实时的,这是意外的。每个人都警告我说,不会…但是可以… 64位特权吗? 为帮助加油!

  • 我正在努力解决hackerrank的一个特殊问题。 为了解决这个问题,我使用hashmap创建了一个字典,我想用这个人的名字搜索电话号码。如果有一个条目与该名称,打印与名称的号码,否则打印未找到。 我得到了所需的输出,但有一个额外的空行。例如,当我搜索名称'J'和'K'时,字典中只有J,我的输出是: