Vue Cli的配置中configureWebpack和chainWebpack的主要作用及区别是什么?

直接区别:

configureWebpack项直接覆盖同名配置;chainWebpack项直接修改默认配置。

configureWebpack配置:

js 复制代码
// vue.config.js
module.exports = {
  configureWebpack: {
    plugins: [
      new MyAwesomeWebpackPlugin()
    ]
  }
}

该代码段中的对象将会被webpack-merge合并入最终的Webpack配置中。

如果需要基于环境有条件地配置,或者想要直接修改配置,可以将configureWebpack配置成一个函数方法。代码如下:

js 复制代码
// vue.config.js
module.exports = {
	configureWebpack: config => {
		if(process.env.NODE_ENV === 'production') {
			// 为生产环境进行配置
		} else {
			// 为开发环境进行配置
		}
	}
}

采用configureWebpack的方式会直接覆盖同名的配置,如果只想修改某个配置的某一个子项,例如loader或plugin的选项,则很可能会覆盖掉不想要覆盖的默认配置,除非把这些默认配置再写一遍。

chainWebpack配置:

js 复制代码
// vue.config.js
module.exports = {
  chainWebpack: config => {
    config.module
    .rule('vue')
    .use('vue-loader')
    .tap(options => {
      // 修改选项
      return options
    })
    
    // 替换一个规则的loader
    const svgRule = config.module.rule('svg')
    svgRule.uses.clear() // 清除已有的所有loader
    // 添加要替换的loader
    svgRule
    .use('use-svg-loader')
    .loader('use-svg-loader')
  }
}

chainWebpack项是一个函数,会接收一个基于webpack-chain的实例,该配置项提供了一个Webpack原始配置的上层抽象,使得可以定义具名的loader规则和具名的插件,并在后期对它们的选项进行修改。

chainWebpack提供了颗粒度更细的配置修改。

比起直接修改configureWebpack配置,chainWebpack的表达能力更强,也更为安全。

根据自己的场景自己选择。

相关推荐
FungLeo16 小时前
成为全栈·Vue 管理后台篇·分类树与标签管理:层级数据如何落到管理界面
前端·javascript·vue.js·分类树·naive ui·标签管理·前端数据结构
ruanno_top20 小时前
选中一项后,焦点掉回了页面顶部:三个弹层的焦点还原
vue.js
tryCbest1 天前
Vue3——第 17 篇:模板引用(ref)与组件实例——操作 DOM 的正确姿势
vue.js·前端搭建
头发还在的女程序员1 天前
Java在线租房系统源码解析:Spring Boot+Vue 3+UniApp房源管理与预约看房方案
java·vue.js·spring boot·租房小程序·租房系统·租房软件
FYKJ_20101 天前
springboot同人周边订单管理系统48955-计算机毕业设计、课程设计
java·javascript·vue.js·spring boot·django·php·课程设计
梯度下降者1 天前
Nuxt框架
vue.js·服务端渲染·全栈开发·混合渲染·nuxt框架
yuyuxun12 天前
协同过滤的校园二手物品智能推荐系统的设计与实现 毕业设计-附源码40082
javascript·vue.js·spring boot·python·数据分析·django·课程设计
FungLeo2 天前
成为全栈·Vue 管理后台篇·编辑器图片上传:从文件选择到文章附件关联
前端·vue.js·编辑器·markdown·文件上传·formdata·附件管理
码云社区2 天前
智慧物业系统选型指南:房屋档案、账单管理与报修协作
前端·javascript·vue.js·智慧物业
ruanno_top3 天前
表单重置后,验证码还显示已通过:Vue 受控组件的 3 种假同步
vue.js