【前端工程化】五:webpack5快速入门(三)

区分打包环境

由于我们在不同环境下的配置不同,所以我们需要将不同环境的配置分别写在不同的文件中,并提取公共配置;

对于不同环境下,我们传入不同的参数;

"scripts": {
   
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack",
    "serve": "webpack serve",
    "build2": "webpack --config ./config/webpack.common.js --env production",
    "serve2": "webpack serve --config ./config/webpack.common.js --env development"
},
// webpack.common.js

module.exports = (env) => {
   
    const isProduction = env.production 
    return {
   
		...config
    }
}

合并生成,开发环境配置

npm install webpack-merge -D

// webpack.common.js
const {
    merge } = require('webpack-merge')
const prodConfig = require('./webpack.prod')
const devConfig = require('./webpack.dev')

module.exports = (env) => {
   
  const isProduction = env.production
  // 为了让配置文件也能拿到process.env.NODE_ENV
  process.env.NODE_ENV = isProduction ? 'production' : 'development'
    
  // 依据当前的打包模式来合并配置
  const config = isProduction ? prodConfig : devConfig
  const mergeConfig = merge(commonConfig, config)
  return mergeConfig
}

process.env.NODE_ENV可以在我们的项目中的js去使用,但是配置文件中没办法使用,所以我们在webpack.common.js中去手动赋值process.env.NODE_ENV可以获取到当前的打包模式;

// babel.config.js
const presets = [
  ['@babel/preset-env'],
  ['@babel/preset-react'],
]

const plugins = []

// 依据当前的打包模式来决定plugins 的值 
const isProduction = process.env.NODE_ENV === 'production'
if (!isProduction) {
   
  plugins.push(['react-refresh/babel'])
}

module.exports = {
   
  presets,
  plugins
}

代码拆分方式

背景: 如果将所有的js放入一个文件加载,那么首页加载的时候会将所有的代码,包括未使用到的代码都会加载,会造成首屏的性能问题;

注意:mode为production的时候会默认将注释剥离,多打包出一个LICENSE.txt文件,需要单独配置TerserPlugin插件的extractComments为false将注释取消;

const TerserPlugin = require
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Whoopsina

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值