- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我已经将 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-merge ,您可以根据 NODE_ENV
创建条件配置,并在执行时将它们合并到一个配置中,优点是您不会创建重复代码,所有事情都可以在一个文件中完成,唯一的缺点是使用新包。
const ENV = process.env.NODE_ENV
let Config = {
//Other shared configurations by production and development
plugins: [
new webpack.ProgressPlugin(),
new CopyWebpackPlugin([
{ from: 'public', to: 'public' },
])
]
}
if (ENV === 'production') {
Config = merge(Config, {
plugins: [
new MiniCssExtractPlugin({
filename: "public/styles.css"
}),
new OptimizeCSSAssetsPlugin({
cssProcessor: cssnano,
cssProcessorOptions: {
parser: safe,
discardComments: { removeAll: true }
}
})
],
mode: 'production'
})
}
if (ENV === 'development') {
Config = merge(Config, {
devtool: 'source-map',
mode: 'development',
plugins: [
new webpack.HotModuleReplacementPlugin(),
new webpack.NamedModulesPlugin(),
new StyleLintPlugin(
{
emitErrors: false,
configFile: '.stylelintrc',
context: 'src',
files: '**/*.pcss',
},
),
]
})
}
const WebpackConfig = Config
可以创建两个单独的文件 webpack.config.prod.js
和 webpack.config.dev.js
并使用不同的 npm 脚本调用它们。此解决方案的问题是存在重复代码。
关于javascript - 网页包 4 : Conditionally enabling PostCSS plugins,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53776957/
感觉代码越少越好,所以想“优化”如何同时启用多个项目: button1.enabled = YES; button2.enabled = YES; textField.enabled = YES; .
我正在尝试禁用和禁用存储在 List 中的 Component。当我尝试这样做时,出现以下错误: 'Component' does not contain a definition for 'enab
我正在努力使用执行器启用 Spring Boot 运行状况检查。由于我们的应用程序依赖于 Spring 1.5.21,因此我必须使用执行器 1.5.21 版本。我在他们的online document
我有一个项目结构如下:.Persistence -> .Repo -> .Services -> .Controllers -> MVC3 App。 每一层都有一个带有接口(interface)的相应
解决方法: 在cmakelists.txt中添加设置: set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fms-extensions") 问题解决 下面是cmakel
我对 powershell 知之甚少。 我想知道是否有人可以指出我需要了解什么来解释以下内容: PS C:\Users\username> (Get-Aduser -Filter 'Enabled -
我有一个运行 Ubuntu 16.04.1x64 的 DO droplet,我正在尝试运行 IPFS作为系统服务。我已经按照说明创建了一个用户“connor”并安装了 IPFS here .我将服务存
我尝试制作 Android WebRTC 应用 我在 Android Oreo 和 Pie 上测试过,该应用运行良好。 但是在 Android Lollipop 和 Marshmallow 上,当我调
我有一个简单的网站,其中一个 aspx 页面 ( Test.aspx ) 显示 Roles.Enabled在 Web.config 中设置为 false 的值(属性 roleManager@enabl
在 Spring Boot 中,对于分段上传,我看到许多教程站点都建议具有以下属性之一:spring.http.multipart.enabled=false或者spring.servlet.mult
我有一个 PHP 库,它使用许多正则表达式,其中包括用于多字节字符串的 \P 表达式,例如 ((((?:\P{M}\p{M}*)+?)|(\'[^\']*\')|(\"[^\"]*\"))!)?\$?
如果“错误运行应用程序:Instant Run 需要启用'工具 | Android | 启用 ADB 集成'。” 使用最新的 Gradle 插件和最新的 Android SDK 时出现问题。您可以使用
在尝试了一些选项后,我仍然没有得到满意的结果: 使用的Javascript库是FullpageJS ( http://alvarotrigo.com/fullPage/ ) Fullpage.js 使
默认情况下,Kafka Consumer 会定期提交当前偏移量,除非通过禁用 enable.auto.commit 将其关闭。 .根据文档,您将负责自己提交偏移量。所以当我想要 手册 控制,这似乎是要
我有一个 AWS SAM 应用程序,其函数包含 schedule 事件,并且我希望有条件地启用/禁用根据参数值为事件生成的 EventBridge 规则。 为此,我在 template.yaml 中执
似乎 servlet 的 web.xml 有一个元素叫做 false 可以像这样放在servelt定义中 example com.example.TestServlet 10
我们有 Aerospike 服务器版本 3.8.3(支持 LDT) 我们遇到以下异常 - 2018-08-01 16:11:31,558 1320573 [task-scheduler-3] ERRO
我有一个运行 Windows 10 Pro 的 Windows VM,我正在尝试安装运行 WSL2 的 Docker。 但是,我遇到了下面的错误,我可以确认 虚拟机平台 Windows 功能 已经启用
我开始学习 Javafx,并且偶然发现了这个“奇怪”的功能。我制作了一个带有两个按钮的简单窗口。当我按下其中一个按钮时,会出现一条蓝色笔画并一直保留在那里,直到我按下另一个按钮。除了知道最后按下的是哪
我在使用 C++ 模板时遇到了这段使用 SFINAE 使用 std::enable_if 的代码.这段代码我面临两个问题。 #include #include enum class Type :
我是一名优秀的程序员,十分优秀!