Vue 提供了一个官方的 CLI,为单页面应用 (SPA) 快速搭建繁杂的脚手架。它为现代前端工作流提供了 batteries-included 的构建设置。只需要几分钟的时间就可以运行起来并带有热重载、保存时 lint 校验,以及生产环境可用的构建版本。首先来看文档地址https://cli.vuejs.org/zh/guide/
1.cli安装 查看版本(是否安装成功):vue -V(大写的V)
npm install -g @vue/cli
# OR
yarn global add @vue/cli
2.创建一个项目
vue create my-project
# OR
vue ui
3.选择
选择default 选默认的包含了基本的 Babel + ESLint 设置
选择manually select feature 为手动选择特性,空格为选择
css批处理器选择的stylus找了一个文档 https://www.zhangxinxu.com/jq/stylus/
4.创建完成,此时可以启动
5.安装elemet,文档地址https://element.eleme.cn/#/zh-CN/component/installation
npm i element-ui -S
6.引入整个 Element在 main.js 中写入以下内容:
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.use(ElementUI);
7.安装axios,文档地址 http://www.axios-js.com/
npm install axios
8.根据自己的习惯优化框架
(1)把路由放在文件夹内,便于管理
在src内新建文件夹router,里面新建index.js,把原来的router.js的内容拷贝进去。
对index.js进行改造:查看里面的路径是否正确,把router进行变量定义,在router执行前进行其他操作。改造后的代码如下,其中会引入一些其他配置会在下面进行说明
import Vue from 'vue'
import Router from 'vue-router'
import { getCurUser } from '@/utils/local'; //本地存储进行封装,便于修改
// Home view 中增加了Home.vue文件
import Home from '@/views/Home.vue'
// about view 中增加了.vue文件
import About from '@/views/About.vue'
// Login view 中增加了 .vue文件
import Login from '@/views/Login.vue'
// ErrorPage view 中增加了 .vue文件
import ErrorPage from '@/views/components/common/ErrorPage.vue'
Vue.use(Router)
const router = new Router({
routes: [
{
path: '/',
name: 'home',
component: Home
},
{
path: '/about',
name: 'about',
component: About
},
{
path: '/login',
name: 'login',
component: Login,
props: true
},
{
path: '*',
name: 'nonexisting',
component: ErrorPage
}
]
})
router.beforeEach((to, from, next) => {
if (to.meta.requireLogin) {
//判断是否登录
if (getCurUser()) {
next()
} else {
next({
path: "/user/login",
query: {
redirect: to.fullPath
}
})
}
} else {
next()
}
});
export default router
(2)本地存储进行封装,便于修改:新建utils文件夹,新建local.js
function setLoginToLocal(val) {
return localStorage.setItem('imesp-token', val);
}
function getLoginToLocal() {
return localStorage.getItem('imesp-token');
}
function getCurUser() {
return localStorage.getItem('curuser');
}
function setCurUser(val) {
return localStorage.setItem('curuser', val);
}
export {
getLoginToLocal,
setLoginToLocal,
getCurUser,
setCurUser
}
(3)axios进行封装,便于统一处理:在utils新建http.js
import axios from 'axios';
import router from '@/router';
import { Message} from 'element-ui';
import { getLoginToLocal, setLoginToLocal } from '@/utils/local';
// axios 使用说明:https://www.kancloud.cn/yunye/axios/234845
// create an axios instance
const service = axios.create({
baseURL: '',
timeout: 20000 // request timeout
})
// token
service.defaults.headers['Authorization'] = getLoginToLocal();
service.interceptors.response.use(
response => {
return response.data;
},
error => {
const res = error.response.data;
if (res.status == 401) {
if(getLoginToLocal()) {
setLoginToLocal('');
router.push({
name: "user-login"
})
}
} else if (res.status == 402) {
router.push({
name: "developer-register"
})
} else {
Message({
message: res.message,
type: 'error',
center: true,
duration: 5 * 1000
});
}
return Promise.reject(error)
}
);
export default service;
目录结构: