创建一个VUE项目,正式开发之前要做的配置~
一、使用vue-cli脚手架创建一个项目,根据我们开发所需生成固定的文件目录(可配置)。

二、创建好项目之后,还并不能开始真正的开发,我们需要做一些开发前的准备,比如请求的axios封装,多环境的地址配置,解决本能地开发跨域等等,做好准备,在后续开发中会有一劳永逸的感觉哦~。
1、多环境的地址配置
- 根据启动命令Vue会自动加载对应的环境,同时其会读取相对应的环境配置文件。
- 在package.json文件中配置好不同环境的打包运行命令
"scripts": {
"dev": "npm run serve", // 本地运行,环境为development
"serve": "vue-cli-service serve",
"build": "vue-cli-service build", // 打生产包 会去读取 .env.product的配置
"build:test": "vue-cli-service build --mode test", // 打测试包 会去读取 .env.test的配置
"lint": "vue-cli-service lint"
},
- 在项目根目录下以.env开头创建不同环境下的地址配置文件,文件里可以配置相应的地址。

2、跨域处理和一些基本配置
在项目根目录创建vue.config.js文件(脚手架帮我们封装好了一套webpack配置,我们有需要的话叠加就好了,不用再写一遍基本配置)
(1)本地开发跨域:通过proxy代理真实请求的地址
(2)配置文件快捷路径: 通过alias配置快捷
(3)配置全局样式:需要先下载对应的插件,这里用了less,需要先下载less, less-loader,style-resources-loader,vue-cli-plugin-style-resources-loader这四个插件(少下载都会导致样式无效哦~)
const path = require('path')
const devServerConfig = {
proxy: {
'/my-web': {
target: process.env.url, // 需要代理的后端地址
changeOrigin: true,
secure: false,
},
},
port: 8080,
}
module.exports = {
devServer: devServerConfig,
pluginOptions: {
'style-resources-loader': {
preProcessor: 'less',
patterns: [path.resolve(__dirname, './src/assets/styles/base.less')], // 可以设置多个
},
},
// 设置快捷路径
chainWebpack: config => {
config.resolve.alias
.set('@api', path.resolve(__dirname, './src/api'))
.set('@assets', path.resolve(__dirname, './src/assets'))
.set('@components', path.resolve(__dirname, './src/components'))
.set('@views', path.resolve(__dirname, './src/views'))
}
}
3、axios的封装
在src目录下创建一个api文件夹(名字可以自定义)
// httpError.js 公共错误提示的js
const ErrorMap = new Map([
[400, '请求错误'],
[401, '未授权,请重新登录'],
[403, '拒绝访问'],
[404, '请求错误,未找到该资源'],
[405, '请求方法未允许'],
[408, '请求超时'],
[500, '服务器端出错'],
[501, '网络未实现'],
[502, '网络错误'],
[503, '服务不可用'],
[504, '网络超时'],
[505, 'http版本不支持该请求'],
]) export const getErrorMessage = (status) => {
if (ErrorMap.has(status)) {
return ErrorMap.get(status)
} else {
return '连接错误,请联系管理员'
}
}
(1)使用一:将每个请求都写成独立的请求函数,组件中引用调用。

优点:多个地方调用,如果接口有变动,直接改这个函数即可(比如请求方法、接口路径等发声改变)
// http.js
import axios from 'axios'
import Vue from 'vue'
import router from '@/router'
import { getErrorMessage } from '@assets/js/httpError' const Axios = axios.create({
baseURL: '/my-web',
timeout: 5000,
}) // 添加请求拦截器
Axios.interceptors.request.use(req => {
let token = localStorage.getItem('_a')
token && (req.headers.Authorization = token)
return req
}, err => {
return Promise.reject(err)
}) // 响应拦截器
Axios.interceptors.response.use(res => {
if (res.data.code === '0') {
return {
data: res.data.data,
response: res,
}
} else {
return Vue.prototype.$message.error(res.data.message)
}
}, err => {
let status
if (err && err.response) {
status = err.response.status
err.message = getErrorMessage(status)
Vue.prototype.$message.error(err.message)
}
if (status === 401) {
router.replace({
path: '/login',
query: {
redirect: router.currentRoute.fullPath
}
})
}
return Promise.reject(err)
}) export default Axios
// home.js
import http from './http' // 获取主页信息
export const getHomeInfo = () => http({
url: '/home/info',
method: 'get',
})
// xxx功能接口
export const xxxx = () => http({
url: '/home/xxx',
method: 'get',
})
...
// vue文件中调用请求函数
<script>
import { getHomeInfo } from '@api/home' export default {
mounted() {
this.getData()
},
methods: {
async getData () {
let { data } = await getHomeInfo()
}
},
}
</script>
(2)使用方法二:在第一种axios封装的基础上,再针对不同类型请求封装,api文件只维护请求接口的url

优点:需要改变请求路径时,只需改动url的配置文件
// http.js import axios from 'axios'
import Vue from 'vue'
import router from '@/router'
import { getErrorMessage } from '@assets/js/httpError' const Axios = axios.create({
baseURL: '/my-web',
timeout: 5000,
}) // 添加请求拦截器
Axios.interceptors.request.use(req => {
let token = localStorage.getItem('_a')
token && (req.headers.Authorization = token)
return req
}, err => {
return Promise.reject(err)
}) // 响应拦截器
Axios.interceptors.response.use(res => {
if (res.data.code === '0') {
return {
data: res.data.data,
response: res,
}
} else {
return Vue.prototype.$message.error(res.data.message)
}
}, err => {
let status
if (err && err.response) {
status = err.response.status
err.message = getErrorMessage(status)
Vue.prototype.$message.error(err.message)
}
if (status === 401) {
router.replace({
path: '/login',
query: {
redirect: router.currentRoute.fullPath
}
})
}
return Promise.reject(err)
}) // 封装的请求函数
function request(url, methods, params, option = {}) {
let headers
if (option.headers) headers = option.headers
return Axios({
url,
methods,
headers,
data: ['POST', 'PUT'].includes(methods) ? params : null,
params: ['GET', 'DELETE'].includes(methods) ? params : null,
})
}
// 暴露给vue文件使用的请求方法
export const getData = (url, params, option) => {
return request(url, 'GET', params, option)
}
export const postData = (url, params, option) => {
return request(url, 'POST', params, option)
}
export const putData = (url, params, option) => {
return request(url, 'PUT', params, option)
}
export const deleteData = (url, params, option) => {
return request(url, 'DELETE', params, option)
}
// url.js
export default {
login: '/login',
homeInfo: '/home/info',
...
}
有两张方式去调用请求:
- 在vue文件中直接引入url
<script>
import url from '@api/url'
import { getData } from '@api/http' export default {
mounted() {
this.getHomeInfo()
},
methods: {
async getHomeInfo () {
// url.homeInfo:接口地址
let { data } = await getData(url.homeInfo)
console.log(24, data)
}
},
}
</script>
- 在Vue原型上挂在url,vue文件中直接获取到this.$url.xxx接口
// main.js文件中加入以下代码,将url挂在到vue实例上 import url from './api/url'
Vue.prototype.$url = url // vue 文件中 <script>
import { getData } from '@api/http' export default {
mounted() {
this.getHomeInfo()
},
methods: {
async getHomeInfo () {
// 直接通过vue拿到url
let { data } = await getData(this.$url.homeInfo)
console.log(24, data)
}
},
}
</script>
看个人习惯选择要那种~
3、路由的处理

- 可以将路由按照页面结构拆分成多个文件引入,便于维护(建议)
- 也可以直接在页面中写完全部路由
import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from '../views/Home.vue' Vue.use(VueRouter) // 解决重复点击相同路由控制台报错问题
const VueRouterPush =VueRouter.prototype.push
VueRouter.prototype.push = function push (to) {
return VueRouterPush.call(this, to).catch(err => err)
} const routes = [
{
path: '/',
name: 'Home',
component: Home
},
]
router.beforeEach((to, from, next) => {
// 进入每个路由前会先进这个函数,一般对身份的验证,路由页面的验证可以放在这里
})
const router = new VueRouter({
mode: 'history',
base: process.env.BASE_URL,
routes
}) export default router
4、配置eslint
创建一个VUE项目,正式开发之前要做的配置~的更多相关文章
- 创建一个vue项目的过程
创建一个vue项目: 1.首先从UI手上拿到PSD设计图,然后看设计搞的内容,需要做个大概的页面布局 2.做vue之前不许安装node,因为做vue项目要和node结合使用 3.然后安装vue脚手架: ...
- 开始创建一个 Vue 项目
开始创建一个 Vue 项目 安装 nodejs 略 安装 npm 默认安装时自带了 npm 安装 cnpm 为了更快的下载组件,使用cnpm,cnpm 是淘宝前端的镜像. 使用 npm 安装 cnpm ...
- 使用命令行工具npm新创建一个vue项目
使用vue开发项目的前期工作可以参考前面写的: Vue环境搭建及node安装过程整理 Vue.js 提供一个官方命令行工具,可用于快速搭建大型单页应用.该工具提供开箱即用的构建工具配置,带来现代化的 ...
- 超详细!新手如何创建一个Vue项目
目录 一.在官网下载Vue.js 二.使用<script>标签直接引入本地的vue.js 三.使用CDN引入Vue.js 四.验证是否安装成功 五.安装Vue Devtools浏览器调试插 ...
- 使用vue-cli创建一个vue项目
安装vue-cli npm install -g @vue/cli 1, 使用vue创建一个项目 vue create luffy 2, 安装所需的插件 npm install vue-router ...
- 快速创建一个vue项目
vue脚手架 用来创建vue项目的工具包 创建项目: npm install -g vue-cli vue init webpack VueDemo 开发环境运行: cd VueDemo npm in ...
- 新手如何创建一个vue项目 ---vue---新手创建第一个项目
1.第一步安装node.js https://nodejs.org/en/ 前期可以下载软件包,后期熟练以后可以通过nvm进行 Node的版本切换以及升级 然后window+r 输入cmd 打开命令 ...
- 创建一个vue 项目 必备的几个插件
第一步npm安装 首先:先从nodejs.org中下载nodejs 打开控制命令行程序(CMD),node -v 检查是否正常 使用淘宝NPM 镜像 npm install -g cnpm - ...
- 创建一个vue项目,vue-cli,webpack
,换成淘宝源: npm config set registry https://registry.npm.taobao.org/ 检查是否修改成功 npm config get registry ,安 ...
- 使用VSCode创建一个Vue项目
vue-cli 是vue.js的脚手架,用于自动生成vue.js模板工程的. 安装vue-cli之前,需要先安装了vue和webpack · node -v //(版本低引起:bas ...
随机推荐
- 【8】2-SAT学习笔记
前言 WFLS 暑假集训 Day10 2-SAT 是一个比较难的算法,属于省选算法,当时学的不好,可能讲的不是很透彻. 2-SAT 有 \(n\) 个布尔变量 \(x_1\sim x_n\),另有 \ ...
- C语言存储区域
有错误请指教 1.文字常量区域 存储在 代码段 不能被修改 2.全局变量 静态存储区 存储在 数据段 3.函数中的局部变量 存储在 栈中 4.malloc new 中的变量存储在 ...
- 我的毕设总结所用的技术和只是要点 基于stm32F4的AGV嵌入式控制系统的设计
小疑惑 TP[num]这种应该是测试端口 OR应该是磁珠或者是.. Altium Designer shift+s 切换单双面 T+ C 查找对应的元器件 J+ C 查找编号 J+L 查找原点 T+M ...
- git代码合并
首先更新到最新的代码. 把自己的代码cherrypick下来. 修改冲突提交
- C++ 模板合集(持续更新)
简介 MGJ 在 \(2025/7/14\) 灵感迸发,就创造了他的蜜汁小凉菜--C++ 模板合集. 模板分模块,有一些模板会有注释.描述.解析.拓展,除注释的文字一般在代码后. 如果这个算法没有模板 ...
- Practice Infinity: Set Theory: Cardinality + Infinity comparation
Practice Infinity Course description Reckoning with infinity is one of the major accomplishments of ...
- Product-Mechanics: 金属机械加工(都有全自动的机床): 冲压+弯折+钣金+喷涂 | Plasma Cutting/Melting Machine(等离子切割/焊接机)
精密机械有限公司拥有: 精密自动数控车床.精密高速冲床.自动高速冷锻打头机.精密CNC数控铣床. 慢/快走丝线切割.精密磨床.铣床.摇臂钻床等精密加工生产设备. 目前的主要产品以及服务有以下几个板块: ...
- linux下vi或vim操作Found a swap file by the name的原因及解决方法--九五小庞
在linux下用vi或vim打开Test.java文件时 [root@localhost tmp]# vi Test.java出现了如下信息: E325: ATTENTION Found a swap ...
- 用 Planet + ENS 构建一个真正去中心化的博客
你是否也想拥有一个无需服务器.不会被平台下架.使用自己域名的博客? 这篇文章将手把手带你完成这一切,只需要 3 个工具: Planet:macOS 上的开源博客 App ENS 域名(如 yourna ...
- Go 源码编译流程
Go 源码编译流程 Go 编译源代码需要经过编译,链接过程.通过以下示例看 Go (Go 版本为 v1.24.1)语言是如何编译源码的. 首先,代码目录结构如下: ➜ demo1 git:(main) ...