Vue 开发实战实战篇 # 28:如何自定义Webpack和Babel配置

Posted 凯小默

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue 开发实战实战篇 # 28:如何自定义Webpack和Babel配置相关的知识,希望对你有一定的参考价值。

说明

【Vue 开发实战】学习笔记。

解决 less 配置问题

main.js 文件添加配置

import Vue from "vue";
import App from "./App.vue";
import router from "./router";
import store from "./store";
import Antd from "ant-design-vue";
// 需要自定义样式主题,这里使用less
import "ant-design-vue/dist/antd.less";

Vue.config.productionTip = false;

Vue.use(Antd);

new Vue(
  router,
  store,
  render: h => h(App)
).$mount("#app");

https://github.com/ant-design/ant-motion/issues/44

这个问题有下面两种方式:第一种是降低less版本,另一个是配置css的 less-loader,我们使用第二种


查看 vuecli 的 官网配置https://cli.vuejs.org/zh/config/#css-loaderoptions

我们新建 vue.config.js 文件,添加下面的配置

module.exports = 
    css: 
        loaderOptions: 
            less: 
                javascriptEnabled: true
            ,
        
    

然后重新启动一下,发现就没有报错了。

我们在 App.vue 组件里添加下面代码

<template>
  <div id="app">
    <a-button>按钮</a-button>
  </div>
</template>

<style lang="less"></style>

按需引入 ant-design-vue 组件

我们可以看到全局注册所有组件会很大


我们可以使用到的时候在引入

import Vue from "vue";
import App from "./App.vue";
import router from "./router";
import store from "./store";

// import Antd from "ant-design-vue";
// // 需要自定义样式主题,这里使用less
// import "ant-design-vue/dist/antd.less";

import Button from "ant-design-vue/lib/button";
import 'ant-design-vue/lib/button/style';

Vue.config.productionTip = false;

// Vue.use(Antd);
Vue.use(Button);

new Vue(
  router,
  store,
  render: h => h(App)
).$mount("#app");

我们可以看到小了很多,但是这样还是很不方便,需要每个都这样去引入单个组件的东西

如果你使用了 babel,那么可以使用 babel-plugin-import 来进行按需加载。

具体可以参考https://1x.antdv.com/docs/vue/introduce-cn/

我们按照文档上的添加babel配置,修改 babel.config.js 配置

module.exports = 
	presets: ["@vue/cli-plugin-babel/preset"],
	"plugins": [
		["import",  
			"libraryName": "ant-design-vue",
			"libraryDirectory": "es",
			"style": true // 会加载 less 文件
		]
	]
;

安装依赖

npm i babel-plugin-import -D


修改 main.js 文件里的引入组件方式

import Vue from "vue";
import App from "./App.vue";
import router from "./router";
import store from "./store";

// import Antd from "ant-design-vue";
// // 需要自定义样式主题,这里使用less
// import "ant-design-vue/dist/antd.less";

// import Button from "ant-design-vue/lib/button";
// import 'ant-design-vue/lib/button/style';

import  Button  from "ant-design-vue";

Vue.config.productionTip = false;

// Vue.use(Antd);
Vue.use(Button);

new Vue(
  router,
  store,
  render: h => h(App)
).$mount("#app");

重启下服务,我们可以看到效果是一样的。

以上是关于Vue 开发实战实战篇 # 28:如何自定义Webpack和Babel配置的主要内容,如果未能解决你的问题,请参考以下文章

Vue 开发实战实战篇 # 43:如何做好国际化

Vue 开发实战实战篇 # 31:如何将菜单和路由结合

Vue 开发实战实战篇 # 32:如何使用路由管理用户权限

Vue 开发实战实战篇 # 35:如何高效地使用Mock数据进行开发

Vue 开发实战实战篇 # 42:如何定制主题及动态切换主题

Vue 开发实战实战篇 # 36:如何与服务端进行交互(Axios)