extract-text-webpack-plugin如何输出多个css文件?

发布于 2022-09-06 21:22:20 字数 652 浏览 13 评论 0

webpack打包多页面,使用webpack4splitChunks方法抽离公共库之后CSS文件不能分离

webpack config

// ...
optimization: {
    splitChunks: {
        cacheGroups: {
            commons: {
                name: 'react',
                chunks: 'all'
            }
        }
     }
},
plugins: [
    ...htmls,
    new ExtractTextPlugin('style/[name].[chunkhash:8].css')
]

不使用 optimization.splitChunks的情况下输出的css文件

index.css
home.css
about.css

使用了之后 只输出一个react.css 并且包含所有的css样式
请教一下大家 如何在抽离了公共库之后还能正常的分离css文件?
谢谢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

倾`听者〃 2022-09-13 21:22:20
  • 1、webpack 多个单页面入口,需要重复写多个entry;
  • 2、webpack entry不支持glob,不可以使用模糊匹配符号
  • 3、webpack 会打包所有的css到一个文件,而有需求是分开输出

一、解决webpack会打包所有css到一个文件

入口要命名,分开写,就会分开打包

const entry = require('webpack-glob-entry')
module.exports = [
    {
        entry: {
            index: './src/index.css',
            main: './src/main.css',
        },
        ...
    },

二、解决以css为入口文件时,仍然会输出多余的空js文件

引入修正插件,会删除多余的js文件

npm install -D webpack-fix-style-only-entries
const FixStyleOnlyEntriesPlugin = require('webpack-fix-style-only-entries')
module.exports = {
        plugins: [
            new FixStyleOnlyEntriesPlugin(),
            ...
        ],
    },

三、解决webpack不支持glob,模糊匹配问题

npm install -D webpack-glob-entry
const entry = require('webpack-glob-entry')
module.exports = [
    {
        entry: entry('./src/*.scss'),
        ...
    },

四、最终webpack.config.js配置

以下配置用于将多个scss文件转换成多个css文件

const path = require('path');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const entry = require('webpack-glob-entry')
const FixStyleOnlyEntriesPlugin = require("webpack-fix-style-only-entries");

const baseConfig = {
    module : {
        rules: [
            {
                test: /\.scss$/,
                use: ExtractTextPlugin.extract({
                    use: ['css-loader', 'sass-loader']
                }),
            }
        ]
    },
    output: {
        path: path.resolve(__dirname, './lib'),
    },
}
module.exports = [
    {
        ...baseConfig,
        entry: entry('./src/*.scss'),
        plugins: [
            new FixStyleOnlyEntriesPlugin(),
            new ExtractTextPlugin({
                filename: `/css/[name].css`,
            }),
        ],
    },
    {
        ...baseConfig,
        entry: entry('./src/component/*.scss'),
        plugins: [
            new FixStyleOnlyEntriesPlugin(),
            new ExtractTextPlugin({
                filename: `/css/component/[name].css`,
            }),
        ],
    },
];
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文