purifycss 清理无用css时,导致很多有用的css被删掉。

发布于 2022-09-07 08:32:46 字数 3727 浏览 26 评论 0

想加入purifycss功能,但是build之后,很多有用的css都没有打包进来?

webpack.build.js
var webpack = require('webpack');
var path = require('path');
var glob = require("glob");

let HtmlWebpackPlugin = require('html-webpack-plugin');
var ExtractTextPlugin = require("extract-text-webpack-plugin");

const CleanWebpackPlugin = require('clean-webpack-plugin');

const CopyWebpackPlugin = require('copy-webpack-plugin');

const PurifyCSSPlugin = require('purifycss-webpack');

//定义部分资源路径
var ROOT_PATH = path.resolve(__dirname);
var SRC_PATH = path.resolve(ROOT_PATH, "src");
var BUILD_PATH = path.resolve(ROOT_PATH, "dist");
var NODE_MODULES_PATH = path.resolve(ROOT_PATH, "node_modules");

console.log(1121212)
console.log(glob.sync(path.join(SRC_PATH, '/*.html')))

module.exports = {
    entry: {
        app: path.resolve(__dirname, 'src/app.js')
    },
    output: {
        path: path.resolve(__dirname, 'dist'),
        filename: '[name].js',
        publicPath: '/',
        chunkFilename: '[name].js'
    },
    module: {
        rules: [
            {
                test: /\.css$/,
                use: ExtractTextPlugin.extract({
                    fallback: 'style-loader',
                    use: ['css-loader']
                })
            },
            {
                test: /\.scss$/,
                // loader: 'style-loader!css-loader!sass-loader!postcss-loader'
                use: ExtractTextPlugin.extract({
                    fallback: 'style-loader',
                    // resolve-url-loader may be chained before sass-loader if necessary
                    use: ['css-loader?minimize', 'postcss-loader', 'sass-loader']
                })
            },
            {
                test: /\.less$/,
                use: [
                    {
                        loader: "style-loader"
                    }, {
                        loader: "css-loader"
                    }, {
                        loader: "less-loader"
                    },
                ]
            },
            {
                test: /\.jsx?$/,
                exclude: /node_modules/,
                use: {
                    loader: 'babel-loader',
                },
                
            },
            {
                test: /\.(png|jpg|gif|svg)/,
                use: [
                    {
                        loader: 'url-loader',
                        options: {
                            limit: 8192,
                            name: 'imgs/[name].[hash:4].[ext]'
                        }
                    }
                ]
            },
            {
                test: /\.(htm|html)/,
                use: ['html-withimg-loader']
            },
        ]
    },
    resolve: {
        extensions: ['.js', '.jsx', '.json', 'jsonp', '.scss', '.less']
    },
    plugins: [
        new webpack.DefinePlugin({
            'process.env': {
                NODE_ENV: '"production"',
            },
        }),

        // 清理文件
        new CleanWebpackPlugin(BUILD_PATH),

        // 拷贝文件
        new CopyWebpackPlugin([
            {
                from: __dirname + '/src/components',
                to: __dirname + '/dist/components',
                ignore: '*.jsx'
            }
        ]),

        // 美化报错提示
        // new FriendlyErrorsPlugin(),

        // 报错停止变异
        // new webpack.NoEmitOnErrorsPlugin(),

        // 单独抽离 CSS
        new ExtractTextPlugin('css/style.css'),
        
        // 清除无用 css
        new PurifyCSSPlugin({
            paths: glob.sync(path.join(SRC_PATH, '/index.html'))
        })

    ],
    devServer: {
        // contentBase: SRC_PATH,
        inline: true,
        port: 7000
    },
    devtool: 'source-map'
};

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

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

发布评论

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

评论(6

清晰传感 2022-09-14 08:32:46

我也遇到这个问题
图片描述

修改了路径,然后就莫名好了点,但还是有些问题
clipboard.png

难如初 2022-09-14 08:32:46

glob.sync(path.join(SRC_PATH, '/.html')) 这里的文件目录需要包含所有你用到样式的地方,所有不要写死成index.html

奢华的一滴泪 2022-09-14 08:32:46

我也遇到这个问题。
测试了下

    new ExtractTextPlugin("css/index.css"), 
    new PurifyCSSPlugin({ 
      paths: glob.sync(path.join(__dirname, '../src/*.html')),
    }),
    
   

解决办法:
1.new ExtractTextPlugin 放在new PurifyCSSPlugin之前。
2.检查下'../src/*.html'路径是否有问题。

素食主义者 2022-09-14 08:32:46

楼主这个问题解决了吗?我也遇到了同样的问题求指教

不及他 2022-09-14 08:32:46

遇到相同的问题,三楼提供的办法可以解决
new ExtractTextPlugin({

filename: "css/[name].css?[hash:8]"

}),
new PurifyCSSPlugin({

paths: glob.sync(path.join(__dirname, "../src/pages/*/*.html"))

})

烛影斜 2022-09-14 08:32:46

今天我也遇到这样的问题,楼上的回答给了很多提示,最后我是这样解决的:

const glob = require('glob-all');
plugins: [
    new ExtractTextPlugin({
          filename: "css/[name].css?[hash:8]"
        }),
    new PurifyCSSPlugin({
      paths: glob.sync([
        path.join(__dirname, '../index.html'),
        path.join(__dirname, '../src/*/*.jsx')
      ])
    })
]

解决办法:
1.安装 glob-all,自带的 glob.sync 只能传一个字符串参数。
1.new ExtractTextPlugin 放在 new PurifyCSSPlugin 之前。
2.glob.sync 中配置所有你引用过样式的文件(注意路径),如 html,jsx。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文