后台管理系统-2.第三方库集成

2.1. vue.config.js配置

Vue CLI依赖于Webpack,但是Vue CLI是将Webpack中的配置隐藏起来了,如果我们对Webpack中的某些配置不满意,如果我们确实想要修改CLI中Webpack的某个配置,可以通过vue.config.jsvue.config.js中的配置会和Vue CLI中Webpack的配置合并

https://cli.vuejs.org/

遇到问题先从官方文档找答案

后台管理系统-2.第三方库集成

vue.config.js有三种配置方式:(终于把这点搞懂了!)

* 方式一:直接通过CLI提供给我们的选项来配置:(名称和webpack中的可能不一样,但是一一对应)
* 比如publicPath:配置应用程序部署的子目录(默认是 `/`,相当于部署在 `https://www.my-app.com/`);
* 比如outputDir:修改输出的文件夹;
* 方式二:通过configureWebpack修改webpack的配置:(和webpack中的名称一样,直接合并)
* 可以是一个对象,直接会被合并;
* 可以是一个函数,会接收一个config,可以通过config来修改配置;

后台管理系统-2.第三方库集成

* 方式三:通过chainWebpack修改webpack的配置:(对webpack中的相关配置进行覆盖)
* 是一个函数,会接收一个基于 [webpack-chain](https://github.com/mozilla-neutrino/webpack-chain) 的config对象,可以对配置进行修改;

对比下面方式二的1和方式二的2以及方式三对别名的修改,因为方式二的第一种是和webpack的配置合并,而webpack中是有对src起别名为'@',所以如下操作。但是方式二的2以及方式三是对webpack中相关配置进行覆盖,所以需要拿到src,重新对它起别名,因此要获取path,拿到绝对路径(这里又涉及到一个require的查找规则,注意复习(jsplus--24))。另外注意方式二接收函数和方式三的区别。

 1 const path = require(‘path’)
 2 
 3 
 4 module.exports = {
 5   // 配置方式二:
 6   configureWebpack: {
 7     resolve: {
 8       alias: {
 9         components: '@/components'
10       }
11     }
12   },
13   configureWebpack: (config) => {
14     config.resolve.alias = {
15       '@': path.resolve(__dirname, 'src'),
16       components: '@/components'
17     }
18   },
19   // 方式三:
20   chainWebpack: (config) => {
21     config.resolve.alias
22       .set('@', path.resolve(__dirname, 'src'))
23       .set('components', '@/components')
24   }
25 }

2.2. vue-router集成(怎么这个步骤就记不住呢)

  • 安装vue-router的最新版本:
1 npm install vue-router@next
  • 创建router对象:(在src下新建一个router文件夹,下面index.ts)
 1 import { createRouter, createWebHashHistory } from 'vue-router'
 2 import { RouteRecordRaw } from 'vue-router'
 3 
 4 const routes: RouteRecordRaw[] = [ #ts是有类型的哦!
 5 {
 6 path: '/',
 7 redirect: '/main'
 8 },
 9 {
10 path: '/main',
11 component: () => import('../views/main/main.vue')
12 },
13 {
14 path: '/login',
15 component: () => import('../views/login/login.vue')
16 }
17 ]
18 
19 const router = createRouter({
20 routes,
21 history: createWebHashHistory()
22 })
23 
24 export default router 
  • 安装router 注册路由:
1 import router from './router' #export default导出的router 不需要括号
2 
3 createApp(App).use(router).mount('#app')
  • 在App.vue中配置跳转:
1 <template>
2 <div id="app">
3 <router-link to="/login">登录</router-link>
4 <router-link to="/main">首页</router-link>
5 <router-view></router-view>
6 </div>
7 </template>

2.3. vuex集成

  • 安装vuex:
1 npm install vuex@next
  • 创建store对象:(在src下面新建一个store文件夹,然后新建一个index.ts)
 1 import { createStore } from 'vuex'
 2 
 3 const store = createStore({
 4 state() {
 5 return {
 6 name: 'coderwhy'
 7 }
 8 }
 9 })
10 
11 export default store
  • 安装store 注册:
1 import store from 'vuex'
2 createApp(App).use(router).use(store).mount('#app')
  • 在App.vue中使用:
1 <h2>{{ $store.state.name }}</h2>

 使用volar插件对ts的检测会更加严格,比如上面的$store在script中没有声明就会报错,这里可以

在shims-vue.d.ts中声明一下:(不过因为我使用的是vetur插件,所以就不需要。这两个插件的作用就是语法高亮 错误提示等)

1 declare let $store: any

2.4. element-plus集成(这部门直接看官网更好)

Element Plus,一套为开发者、设计师和产品经理准备的基于Vue3.0的桌面端组件库:

* 相信很多同学在Vue2中都使用过element-ui,而element-plus正是element-ui针对于vue3开发的一个UI组件库;
* 它的使用方式和很多其他的组件库是一样的,所以学会element-plus,其他类似于ant-design-vue、NaiveUI、VantUI都是差不多的;

安装element-plus

1 npm install element-plus

2.4.1. 全局引入

一种引入element-plus的方式是全局引入,代表的含义是所有的组件和插件都会被自动注册:

1 import ElementPlus from 'element-plus'
2 import 'element-plus/dist/index.css'
3 
4 import router from './router'
5 import store from './store'
6 
7 createApp(App).use(router).use(store).use(ElementPlus).mount('#app')

---全局引入(所有的组件全部集成):优点:集成比较简单 缺点:会全部打包
---局部引入(按需引用):优点:包会小一些

 快速开始 | Element Plus (gitee.io)

官网按需引入的方法好像一直在该,这次按照它上面来居然没成功,所以还是把过程记录一下吧!
1 npm install -D unplugin-vue-components

修改vue.config.js的配置

1 const Components = require('unplugin-vue-components/webpack')
2 const { ElementPlusResolver } = require('unplugin-vue-components/resolvers')
  configureWebpack: {     plugins: [       Components({         resolvers: [ElementPlusResolver()]       })     ]   },

然后就可以直接使用了,但是要注意,图标比较特殊哦!

补充知识点

app.use()中可以传入一个函数,也可以传入一个对象。

传入一个函数时,默认会自动执行这个函数,并且会把app传入此函数。

传入一个对象时,默认会去执行这个对象的install,在执行这个对象的install时也会默认传入app

后台管理系统-2.第三方库集成

2.5. axios集成

  • 安装axios:
npm install axios
  • 封装axios:(为什么要封装?1、如果不封装,各个文件中都直接使用axios,那么一旦axios不更新了或者升级了,我们就要改很多地方,维护起来很麻烦;2、在发送网络请求时可能有很多共同的特性,比如像后台管理系统这样的项目一般除了登录接口之外,其他接口在进行请求时都需要携带token,每个token最好放在header里面,再发送请求,既然每个请求都需要做这个操作,不如封装起来,不然会有很多重复逻辑。)
  • 封装逻辑:(感觉自己突然顿悟了!!!)在src--service中创建一个index.ts作为service的出口文件(其他地方需要使用只需导入'./service'就可以了,不用加index.ts),在service--request中创建index.ts里面封装一个HYRequest类,如下。在src--service--index.ts中实例化HYRequest这个类,然后其他地方就可以直接使用实例.方法进行调用!
  • 我们之前用的axios.get等等中的axios其实是axios实例
  • 为什么要选择把所有的axios封装到一个类中?如果有很多逻辑需要封装,类是一个不错的选择,因为类具有更强的封装性,类本身就具备封装(还有继承、多态)
  • 封装逻辑详细描述:

1.大多数情况下项目是只有一个base_url的,但是如果一个项目有两个base_url呢?我们要导出两个new Request吗?要知道axios是可以配置base_url的,也就是说我根本没办法区分谁是谁,那怎么办?可以在对axios进行封装的时候根据不同的config就创建不同的axios实例

后台管理系统-2.第三方库集成

  参照代码

2.6环境变量的配置

见32ppt

上一篇:Vue脚手架组件开发及路由渲染


下一篇:react-router(v5)路由更新但页面没刷新