Начинать
Наша текущая конфигурация прописана в папке webpack.config.js, но на самом деле конфигурация, которую мы используем в среде разработки и производственной среде, отличается, например, размер пакета, который нам нужен в производственной среде, не может быть очень большой. , иначе онлайн-ответ будет медленнее. Поэтому нам нужно отделить производственную среду от среды разработки.
cross-env
В узле у нас есть объект процесса, который включает в себя некоторую информацию об узле, env и одном из его атрибутов, но нет process.env.NODE_ENV, переменной, которую мы добавили, чтобы различать среду, которую мы используем, чтобы различать производственная среда разработки.
Но способ установить его на разных компьютерах отличается, поэтому приходит cross-env, он может устанавливать среду и использовать переменные среды на разных платформах.
Нам нужно выполнить в консоли:
yarn add cross-env -D
Затем настраиваем в package.json:
"build": "cross-env NODE_ENV=production webpack",
"dev": "cross-env NODE_ENV=development webpack-dev-server"
Добавляем в webpack.config.js:
const NODE_ENV=process.env.NODE_ENV;
console.log("--------"+NODE_ENV+"-----------");
Затем перейдите в консоль для выполнения при выполнении сборки запуска пряжи:
Консоль выводит поставленную нами постановку.При выполнении пряжи run dev:
Развертка распечатывается, указывая на то, что мы завершили настройку.webpack-merge
После настройки среды нам необходимо разделить конфигурацию.Сначала мы создаем новую ==webpack.config.dev.js== (среда разработки), ==webpack.config.prod.js== (производственная среда) в корневой каталог и установите исходный файл webpack.config.js измененным на ==webpack.config.common.js== (общедоступный).
Отдельное окружение нужно объединить с общим кодом, поэтому нам нужно использовать плагин webapck-merge, выполняем его в консоли:
yarn add webpack-merge -D
После загрузки перейдите в package.json, чтобы изменить конфигурацию:
//--config是可以设置我们执行哪个webpack文件,默认是执行webpack.config.js,但是我们现在修改文件名了,所以我们要设置一下
"build": "cross-env NODE_ENV=production webpack --config webpack.config.prod.js",
"dev": "cross-env NODE_ENV=development webpack-dev-server --config webpack.config.dev.js"
Мы переместили некоторые вещи, используемые в среде разработки, в ==webpack.config.dev.js==:
const path=require('path');
const webpack=require('webpack');
const merge=require('webpack-merge');//这里引入merge
const common=require('./webpack.config.common.js');//这里引入公共代码
module.exports=merge(common,{//注意这里的写法
mode:'development',
devtool:'cheap-module-eval-source-map',
module:{
rules:[
]
},
devServer: {
contentBase: path.join(__dirname, "dist"),
compress: true,//开启gzip压缩
port: 8080,
open:true,
hot:true,
overlay:true,
},
plugins:[
new webpack.HotModuleReplacementPlugin(),
]
})
Рабочая среда перемещена в ==webpack.config.prod.js==:
const merge=require('webpack-merge');
const webpack=require('webpack');
const common=require('./webpack.config.common.js');
const MiniCssExtractPlugin=require('mini-css-extract-plugin');
const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer');
const UglifyJsPlugin = require("uglifyjs-webpack-plugin");
const OptimizeCSSAssetsPlugin = require("optimize-css-assets-webpack-plugin");
const CleanWebpackPlugin = require('clean-webpack-plugin');
module.exports=merge(common,{
mode:'production',
module:{
rules:[
]
},
plugins:[
new MiniCssExtractPlugin({//提取css
filename:'css/main.css'
}),
new CleanWebpackPlugin('./dist'),//删除dist目录下的文件
new BundleAnalyzerPlugin({ analyzerPort: 8090 }),
]
})
Затем перейдите к ==webpack.config.common.js== и удалите соответствующий код.
Здесь следует отметить еще один момент: при использовании MiniCssExtractPlugin.loader он не поддерживает горячее обновление, поэтому нам нужно различать это в зависимости от среды, мы модифицируем его в ==webpack.config.common.js==:
//开发环境使用style-loader
{
loader:NODE_ENV==="production" ? MiniCssExtractPlugin.loader : "style-loader"
}