VUE环境配置
安装 vue
在 vue官网,使用 cli 命令行脚手架创建基本项目
1
2
3
4
5
6
7
8
9全局安装 vue-cli
npm install --global vue-cli
创建一个基于 webpack 模板的新项目
vue init webpack my-project
安装依赖,走你
cd my-project
或者 yarn
npm install
npm run dev运行
npm run dev
打开浏览器 http://localhost:8080
配置
开发环境 vscode
使用 eslint 规范代码质量
vscode 安装插件 eslint
配置代码格式化规则 eslint
1
2
3
4
5
6
7
8
9
10
11
12
13"eslint.autoFixOnSave": true,
"eslint.validate": [
"javascript",
"javascriptreact",
{
"language": "html",
"autoFix": true
},
{
"language": "vue",
"autoFix": true
}
],安装 vetur,配置
1
2"vetur.format.defaultFormatter.html": "js-beautify-html",
"vetur.format.defaultFormatter.js": "vscode-typescript",
axios
安装
yarn add axios
在 main.js 中导入并应用
1
2import axios from "axios";
Vue.prototype.$http = axios;
muse-ui
安装
yarn add muse-ui
加载main.js
1
2
3
4import Vue from "vue";
import MuseUI from "muse-ui";
import "muse-ui/dist/muse-ui.css";
Vue.use(MuseUI);图标显示
下载图标
解压复制 iconfont 到 static 中,然后在 index.html 引用
mdui
安装
yarn add mdui
引入 css
1
import "mdui/dist/css/mdui.css";
在需要用 mdui api 时,引入
1
import mdui from "mdui";
开发环境和生产环境
利用 webpack 区分两种环境
build/webpack.dev.conf.js
文件在 new webpack.DefinePlugin 附近
1
2
3
4new webpack.DefinePlugin({
'process.env': require('../config/dev.env'),
MONITOR_IP: "'http://127.0.0.1:8360/'",
}),注意:如果配置时字符串的时候,一定要套两层引号,或者使用
JSON.stringify("XXXXX")
下面是集中配置方式
1
2
3
4
5
6
7new webpack.DefinePlugin({
PRODUCTION: JSON.stringify(true),
VERSION: JSON.stringify("5fa3b9"),
BROWSER_SUPPORTS_HTML5: true,
TWO: "1+1",
"typeof window": JSON.stringify("object"),
});参考https://segmentfault.com/a/1190000006952432
DefinePlugin
可能会被误认为其作用是在 webpack 配置文件中为编译后的代码上下文环境设置全局变量,但其实不然。它真正的机制是:DefinePlugin
的参数是一个 object,那么其中会有一些key-value
对。在 webpack 编译的时候,会把业务代码中没有定义(使用 var/const/let 来预定义的)而变量名又与key
相同的变量(直接读代码的话的确像是全局变量)替换成value
。例如上面的官方例子,PRODUCTION
就会被替换为true
;VERSION
就会被替换为'5fa3b9'
(注意单引号);BROWSER_SUPPORTS_HTML5
也是会被替换为true
;TWO
会被替换为1+1
(相当于是一个数学表达式);typeof window
就被替换为'object'
了。配置完成后,就可以在代码中直接使用,但是因为 eslint 的关系,会提示变量没有定义,但其实是可以直接用的。需要手动指定变量为全局变量
1
/* global MONITOR_IP:true */
简单基于 token 的身份认证
页面跳转时,判断 localStorage 是否有 token,有则 next(),没有跳转到登陆
本应用使用 cas 单点登录方式,所以跳转到 cas 登陆页面
登陆成功自动跳转到应用的登陆页面,登陆应用获取 token
获取 token 后,把 token 放到 localStorage
然后跳转到首页
配置 axios 请求拦截器,如果 localStorage 里有 token 则在头部加入 Authorization
1
2
3
4
5
6
7
8http.interceptors.request.use((config) => {
if (localStorage.token) {
config.headers = {
Authorization: `Bearer ${localStorage.token}`,
};
}
return config;
});