Vue.use
所有vue后缀文件都是组件,需要在main.js中引入(import)并注册组件
自定义插件:
1 | // 自定义插件对象 |
main.js
1 | import Vue from '../Vue.js' |
打包优化
vue-cli语法:yarn build
优化:
js文件夹中的map后缀文件是用来做浏览器兼容调试的,不需要可以删
ventors作为第三方包的汇总会很大
CDN优化:CDN是部署于世界各地的服务器,服务器内有大部分常用的第三方包(将包部署于CDN需要收费,很贵,一般不会把项目部署到CDN中),引入时其实只要写上包的地址即可,不需要放在项目中
配置方法(以Vue举例):
1
2<!-- 在打包后的index.html中引入 -->
<script src="cdn中Vue的地址"></script>1
2
3
4
5
6
7
8// 在vue.config.js中配置webpack忽视node_modules
configurWebpack: {
// 配置打包的排除项,从外部引入
externals: {
// 这样就会忽视node_modules,去导入全局的vue了
vue: 'Vue' // 这个值需要去对应的cdn地址的文件中找export的变量名
}
}自己的js也打包到一个文件内了,项目页面多了会很大
vue异步组件:需要什么加载什么
- 第一步优化:
1
2
3
4
5
6
7// router.js
// 将import需要的路径放到一个返回该路径的回调函数中,不调用该函数不会加载组件
// import Login from './components/Login.vue'
const Login = () => import('./components/Login.vue')
// 问题:请求次数变多了- 第二步优化:
1
2
3
4// 将引入的模块分类
const Login = () => import(/* webpackChunkName: '模块分类名' */'./components/Login.vue')
// 这样打包后会将同一个分类的模块打包到一起去,访问其中一个会请求所有的模块
上线前需要把main.js中配置的axios默认路径前缀修改为线上服务器路径。
Vuex
vuex时vue的状态管理工具,用于管理vue中的数据,所有组件都能访问到其中的数据,和localStorage类似。
和localStoragede区别:
localStorage中只能存字符串,而vuex可以存任意类型
vuex会增加项目复杂度
使用方法:
下载&引入
用
Vue.use()使用vuex创建仓库store
1
2
3
4
5
6const store = new Vuex.Store({
// 状态即数据
state: {
msg: 'hoho'
}
})和vue实例建立关联
1
2
3
4
5
6
7const vm = new Vue({
el: '#app',
data: {
msg: 'lala'
},
store
})
访问vuex中的数据:
js中
store.state.msgthis.$store.state.msgvm.$store.state.msg
组件中
$store.state.msg
写起来很麻烦,通常使用计算属性返回
修改vuex中的值
直接修改vuex的值不会报错,需要采用严格模式(原理为深度监听,上线后需要取消):
1 | const store = new Vuex.Store({ |
应该遵守vuex到项目的单向数据流,修改数据应该使用mutation方法
1 | const store = new Vuex.Store({ |
基于vuex的派生属性(相当于计算属性的getter)
1 | const store = new Vuex.Store({ |
vuex辅助函数的使用(语法糖)
mapGetters:是一个函数,将vuex中的getters直接映射给组件,相当于在computed中设置属性返回getters
1
2
3
4
5
6
7
8
9
10
11
12// 组件中
import { mapGetters } from 'vuex'// 精确导入
export default {
computed: {
// 为了写自己的计算属性,使用展开运算符
...mapGetters([getters中的属性名]),
// 使用对象可以自定义属性名
...mapGetters({
自定义属性名: getters中的属性名
})
}
}mapState:用法和mapGetters一样
mapMutations:不好用,因为只有只进行了提交操作的mutations能使用
vuex-actions
由于异步函数是由window调用的,所以mutiation中使用异步函数会报错。事实上所有回调函数的调用都无法被追踪,所以需要用到actions
1 | // vuex中 |
1 | // 组件中 |
module
在需要多个仓库里使用module来分模块
vue反向代理
浏览器同源策略会使浏览器与服务器之间产生跨域问题,但是服务器与服务器之间没有跨域问题,所以在vue中采用代理服务器就可以解决这一问题。
使用webpack中的配置可以进行配置(平常更多使用的是ngnix),开发的时候常会遇到跨域问题,使用的较为频繁
配置devServer.proxy
1 | // vue.config.js中 |
之后再发送请求,表面上是向页面所在服务器请求,实际上则是由代理服务器向后台发送了请求,并返回了数据。