Vue_cli 3.0基础项目搭建

在vue2.0的时候我们下载cli的会自动集成webpack配置文件,而vue3.0以后配置文件就不会集成了都是自己在根目录新建文件配置,那么以前用习惯2.0的朋友就有些不习惯还得重新找资料学习接下来我会整理一些3.0的用法。

安装全局vue3.0命令下载cli脚手架
如果电脑有以前的旧版本必须先卸载掉npm uninstall vue-cli -g

//安装全局命令
npm install @vue/cli -g
//下载脚手架 (vue_project)项目名称
//下载下来的cli没有配置文件需要自己去新建配置文件
vue create vue_project

//和2.0旧版本相识用法,自动集成配置文件的3.0版本
npm install -g @vue/cli-init
//下载脚手架 (vue_project)项目名称
//下载的cli自动集成配置文件,和2.0版本用法基本一致
vue init webpack vue_project

3.0集成目录简绍

public 文件夹
1.favicon.ico 是网站图标
2.index.html 页面入口文件

src 文件夹
main.js 入口js
assets 存放静态文件
components 存放公用组件
App.vue 入口vue文件

.eslintrc.js 配置
.gitignore 指定文件无需提交到git上
balel.config.js 使用一些预设
package.json 项目描述及依赖
package-lock.json 版本管理使用的文件

上面的目录是你下载脚手架时自动集成的肯定不利于我们开发,一般我们开发都会加一些自己的目录扩展,下面的一张截图相信大家一看就知道每个目录的用途


image.png

多环境运营

我们做的项目肯定会在不同的环境下运营,最常用的三种环境(开发,生产,测试),这样呢我们就会做一些环境的配置,避免来回更换地址相关配置的麻烦。

第一种方法:
在项目根目录新建文件 (.env.development,.env.production,.env.test )
.env.development 模式用于serve,开发环境。
.env.production模式用于build,线上环境。
.env.test 测试环境

//分别文件内写上配置
VUE_APP_BASE_API = '需要请求API'
//当需要用到该变量取值时
process.env.VUE_APP_BASE_API
//更改package.json文件
"scripts": {
    "dev": "vue-cli-service serve",
    "test": "vue-cli-service serve --mode test",
    "build": "vue-cli-service build",
    "build:test": "vue-cli-service build --mode test",
    "lint": "vue-cli-service lint"
  },

第二种方法:
在config文件新建index.js文件,根据全局的环境变量来进行判断

const modeUrlObj = {
  // 生产环境
  'production': {
    baseURL: '需要请求API',
    authBaseURL: ''
  },
  // 开发环境
  'development': {
    baseURL: '需要请求API',
    authBaseURL: ''
  },
  // 测试环境
  'test': {
    baseURL: '需要请求API',
    authBaseURL: ''
  }
}
export default modeUrlObj[process.env.NODE_ENV]
//同样需要更改package.json文件,package.json与方法一配置相同

引用的方法

import config from '../config/index' // 路径配置
config.baseURL  // 对应环境api
//运行命令
npm run dev // 开发环境
npm run test // 测试环境
npm run build // 正式环境打包
npm run build:test // 测试环境打包

vue路由

//下载路由
cnpm install vue-router --save

在router文件新建index.js文件,用来配置路由表

//src/router/index.js文件
import Vue from 'vue';
import Router from 'vue-router';
import Home from '@/views/home';
Vue.use(Router)

const router = new Router({
    mode: 'history',
    routes: [{
        path: '/',
        name: 'Home',
        component: Home
    }]
})

export default router;

在main.js中全局引入挂载路由

import router from './router'; //路由
new Vue({
    router,
    store,
    render: h => h(App),
}).$mount('#app')

在App.vue文件中写入<router-view></router-view>这样就可以正常使用了

<template>
  <div id="app">
    <router-view></router-view>
  </div>
</template>

axios封装全局引用

src/utils/request.js

// 引用环境全局环境
import config from '../config/index.js';
import axios from 'axios'

// 创建axios请求实例
const request = axios.create({
    baseURL: config.baseURL, // 设置跨域代理接口统一的前置地址
    timeout: 1000,
    headers: {
        'Content-Type': 'application/json; charset=utf-8',
        'Authorization': localStorage.getItem('token')
    }
})

// 添加请求拦截器
request.interceptors.request.use(function(config) {
    // 在发送请求之前做些什么
    return config
}, function(error) {
    // 对请求错误做些什么
    return Promise.reject(error)
})

// 添加响应拦截器
request.interceptors.response.use(function(response) {
    // 只返回数据
    return response.data
}, function(error) {
    const status = error.response.status
    if (status >= 500) {
        alert('服务繁忙请稍后再试')
    } else if (status >= 400) {
        alert(error.response.data.message)
    }
    // 对响应错误做点什么
    console.dir(error)
    return Promise.reject(error)
})

const get = (url, data) => request.get(url, {
    params: data
})
const post = (url, data) => request.post(url, data)
const DELETE = (url, data) => request.delete(url, data)
const head = (url, data) => request.head(url, data)
const options = (url, data) => request.options(url, data)
const put = (url, data) => request.put(url, data)
const patch = (url, data) => request.patch(url, data)

export {
    get,
    post,
    DELETE,
    put,
    head,
    options,
    patch
}

src/api/index.js(接口不多的时候一个js文件就够用了,当接口过多时可以用index.js文件做主入口文件,新建其他模块文件便于管理)

import { post } from '../utils/request.js';
// 在组件中可以直接 this.postLogin(传递参数).then()调用
const install = function(Vue) {
    // 登录
    Vue.prototype.postLogin = function(body) {
        return post('/user/login', body)
    }
}
export default install;

main.js中全局挂载接口方法(这样就可以在所有组件中调用了)

// 挂载全局请求方法
import Api from './api/index';
Vue.use(Api);

在组件中调用接口

this.postLogin(data).then(res=>{
    console.log(res,'成功返回数据')
}).catch(err=>{
    console.log(err,'失败时返回错误')
})

全局配置

vue2.0的时候我们都在集成的webpack中配置我们需要的第三方插件,现在3.0我们需要在项目根目录新建vue.config.js配置文件。

//vue.config.js全局配置文件
module.exports = {
    //配置css loader
    css: {
        loaderOptions: {
            sass: {
                // sass 版本 9 中使用 additionalData 版本 8 中使用 prependData 旧版本中使用 data
                additionalData: `@import "@/assets/style/main.scss";
                @import "@/assets/style/minxin.scss";`
            }
        }
    },
    // 配置
    configureWebpack: {
        resolve: {
            // 配置别名
            alias: {
                'assets': '@/assets',
                'com': '@/components'
            }
        }
    },
    // 跨域代理
    devServer: {
        proxy: {
            '/api': {
                target: '',
                changeOrigin: true
            }
        }
    },
    publicPath: './', // 编译后的地址,可以根据环境进行设置
    // lintOnSave: true, // 是否开启编译时是否不符合eslint提示
}

具体可以参照官网的配置说明,我只是配了一下常用的。
这是我自己基于脚手架搭建的基础项目为了方便使用,大家不嫌弃的话也可以拿去使用vue3.0,一些没有的功能后续还会继续完善。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351