我已将PostCSS集成到Webpack中,使用单独的postcss.config.js
文件。
我想在生产构建时启用cssnano
,并在开发构建时禁用它。如何做到这一点?
这是我的webpack.config.js:
const webpack = require('webpack');
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const CleanWebpackPlugin = require('clean-webpack-plugin');
const ManifestPlugin = require('webpack-manifest-plugin');
const path = require('path');
module.exports = (env, argv) =>
{
//const isProduction = (process.env.WEBPACK_MODE === 'production')
const isProduction = argv.mode === 'production' || process.env.NODE_ENV === 'production';
const config = {
entry: './src/index.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: '[name].[contenthash].js',
chunkFilename: '[name].[contenthash].js'
},
devtool: 'source-map',
module: {
rules: [
{
test: /\.(sa|sc|c)ss$/,
use: [
// fallback to style-loader in development
//process.env.NODE_ENV !== 'production' ? 'style-loader' : MiniCssExtractPlugin.loader,
{
loader: MiniCssExtractPlugin.loader,
options: {
sourceMap: true
}
},
//'css-loader?-url',
{
loader: 'css-loader',
options: {
minimize: true,
sourceMap: true,
url: false
}
},
{
loader: 'postcss-loader',
options: {
sourceMap: true
}
},
{
loader: 'resolve-url-loader',
options: {
sourceMap: true,
debug: false
}
},
{
loader: 'sass-loader',
options: {
sourceMap: true,
outputStyle: 'compressed',
sourceMapContents: false
}
}
]
}
]
},
plugins: [
new CleanWebpackPlugin('dist', {
watch: true
}),
new MiniCssExtractPlugin({
// Options similar to the same options in webpackOptions.output
// both options are optional
filename: isProduction ? "live.[contenthash].css" : "live.css",
chunkFilename: "[name].[contenthash].css"
}),
new ManifestPlugin()
]
}
return config;
}
这是我的 postcss.config.js 文件
module.exports = {
plugins: [
require('postcss-import'),
require('postcss-url'),
require('autoprefixer'),
require('cssnano')({
preset: 'default',
})
]
}
其次,建议使用单独的
postcss.config.js
文件吗?我看到一些示例中PostCSS插件是在webpack.config.js
中定义的,而其他示例则在单独的文件中完成。
webpack.config.base.js
的文件,其中包含公共代码,然后从webpack.config.dev.js
和webpack.config.prod.js
中导入它。通过这种方式,您可以对所有方面进行细粒度控制,同时不安装可能会导致冗余的其他软件包。 - Adrianowebpack-merge
包的功能,但这个代码片段提供了一个相当简单的解决方案。https://gist.github.com/ericclemmons/40a2783313d157d8b448 - Daniel Dobladopostcss.config.js
不受合并Webpack配置的影响? - PeterBpostcss.config.js
应该加载你的插件,而在 webpack 配置文件中,你应该有条件地选择它们的使用方式。在我的例子中,你可以看到cssnano
只用于生产环境。 - Daniel Doblado