PostCSS和Webpack配置

3

我感到十分沮丧,因为我找不到任何有用的关于这个主题的资源。

我只想监视我的.css文件,使用post css插件转换它们,并最终像我处理.jsx文件一样将它们导出到我的/public文件夹中。

这是我的webpack配置:

    const path = require('path');
const webpack = require('webpack');

var ExtractTextPlugin = require('extract-text-webpack-plugin');

module.exports = {
    entry: path.resolve('src/index.jsx'),
    output: {
        path: path.resolve('public'),
        filename: 'bundle.js'
    },
    resolve: {
        extensions: ['*', '.js', '.jsx']
    },
    devServer: {
        publicPath: "/",
        contentBase: "./public"
    },
    module: {
        rules: [
            {
                test: /\.css$/,
                exclude: /node_modules/,
                loader: ExtractTextPlugin.extract({
                    fallback: 'style-loader',
                    use: [
                        {
                            loader: 'css-loader',
                            options: {
                                modules: true,
                                localIdentName: '[name]__[local]___[hash:base64:5]'
                            }
                        }, {
                            loader: 'postcss-loader',
                            options: {
                                plugins: function() {
                                    return [require('lost'), require('postcss-cssnext'), require('postcss-import')]
                                }
                            }
                        }
                    ]
                })
            }, {
                test: /\.jsx?$/,
                use: [
                    {
                        loader: 'babel-loader',
                        options: {
                            presets: ['es2015', 'react']
                        }
                    }
                ],
                exclude: /(node_modules|bower_components)/
            }
        ]
    },
    plugins: [new ExtractTextPlugin("main.css")]
}
2个回答

4

我假设你正在使用webpack2

如果你想将CSS文件单独导出,你需要使用ExtractTextPlugin插件。这是我的CSS loader,它可以正常工作

我在webpack配置中定义了postcss插件,因为这样它们就可以保存在一个地方。希望这能帮到你:

var ExtractTextPlugin = require('extract-text-webpack-plugin');
...
...
module.exports = {
...
...
    module: {
        rules: [
...
...
            {
                test: /\.css$/,
                exclude: /node_modules/,
                loader: ExtractTextPlugin.extract(
                    { fallback: 'style-loader',
                    use: [{
                        loader: 'css-loader',
                        options: {
                            modules: true,
                            localIdentName:'[name]__[local]___[hash:base64:5]'
                        }
                    },
                    {
                        loader: 'postcss-loader',
                        options: {
                            plugins: function() {
                                return [
                                    require('autoprefixer')
                                ]
                            }
                        }
                    },
                ]
            })
        },
}

更新了我的代码。运行时没有错误,但没有输出。 - Rentonie
你是否在JS文件中导入CSS文件?例如:import styles from './styles/buttons.css'; - vma

0

可能是你的插件创建不正确。

尝试一下:

return [require('lost')(), require('postcss-cssnext')(), require('postcss-import')()]

(注意使用()来调用插件创建)。

另外,您是否真正使用import/require()来包含您的CSS?如果没有,您应该这样做,没有任何神奇的东西会全局搜索您的CSS :)


顺便说一下,postcss-import 应该是你的插件列表中的第一个。 - MoOx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接