@vue/cli 项目初始化起手式

本文档对应的代码库: https://github.com/Lzq811/VueCli3.x-project/tree/init-project-%40vue/cli 对应其中的 init-project-@vue/cli 分支

参考VUECLI官方文档:https://cli.vuejs.org/zh/guide/

@vue/cli + element + axios+ vuex + ecahrts + 配置运行和打包环境

安装脚手架

npm install -g @vue/cli
# OR
yarn global add @vue/cli
# 检查是否安装正确
vue --version # 结果如下图则表示安装成功
install ok.png

提示: 如果现实 vue 命令不存在则是要为vue配置全局环境变量, 配置方法参考:https://www.jianshu.com/p/50d7d91ba674

升级脚手架

npm update -g @vue/cli
# OR
yarn global upgrade --latest @vue/cli

创建一个项目

# 可以使用 vue create --help 来按需配置,也可以用下面的命令快速生成项目
vue create web-dev-standard #  web-dev-standard是你想要创建项目的名称
# 选择是否是有 淘宝 镜像
# 选择vue的版本
# 选择 使用 Yarn 还是 npm 做依赖包管理工具
# 等待下载完成之后
cd .\web-dev-standard 进入 项目 文件夹
yarn serve # 启动项目 用serve 不习惯, 改成 yarn start 来启动项目, 只需在 package.json 文件的 script 里添加对应的指令即可, 参考下面的图片

# 访问 http://localhost:8080 默认监听 8080 端口
create.png
yarnornpm.png
start.png
open.png
yarn start.png
open ok.png

初始化目录如下图

dir path ok.png

配置时无需 Eject

通过 vue create 创建的项目无需额外的配置就已经可以跑起来了。插件的设计也是可以相互共存的,所以绝大多数情况下,你只需要在交互式命令提示中选取需要的功能即可。

不过我们也知道满足每一个需求是不太可能的,而且一个项目的需求也会不断改变。通过 Vue CLI 创建的项目让你无需 eject 就能够配置工具的几乎每个角落

使用 less 、stylus、 scss 等css预编译器

less 、stylus、 scss 等都是非常常用的 css 预编译器, 无需过分对比哪个更好, 都可以放心使用
element-ui是使用了 scss ,如果我们也使用scss就可以无缝的修改 element-ui定义好的 变量
但是个人偏爱 less, 下面就附上 less 的使用方法

参考vue cli的使用方法:https://cli.vuejs.org/zh/guide/css.html

  1. 安装
npm install less less-loader --save
# OR
yarn add less less-loader --save
  1. 使用之前的配置 vue.config.js
css: {
    loaderOptions: {
      less: {}
    }
  }
less-loader.png
  1. 使用示例
.axios-demo-page {
  border: 1px solid red;
  .title {
    font-size: 40px;
    font-weight: 700;
    color: yellowgreen;
  }
}
  1. 修改默认监听的端口号
    在vue.config.js 文件里添加, 参考文档 https://cli.vuejs.org/zh/config/#devserver
    和 webpack 的配置文档: https://webpack.js.org/configuration/dev-server/
devServer: {
    port: 3030
  }

使用 element-ui

element-ui官方地址:https://element.eleme.cn/#/zh-CN/component/installation

  1. 安装 element-ui 依赖包
npm i element-ui -S
#OR
yarn add element-ui -S
  1. 完整引入 Element
    在 main.js 中写入以下内容:
import Vue from 'vue';
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import App from './App.vue';

Vue.use(ElementUI);

new Vue({
  el: '#app',
  render: h => h(App)
});
  1. 按需引入
    参考文档: https://element.eleme.cn/#/zh-CN/component/quickstart
  1. 全局配置
    完整引入 Element:
import Vue from 'vue';
import Element from 'element-ui';
Vue.use(Element, { size: 'small', zIndex: 3000 });

按照以上设置,项目中所有拥有 size 属性的组件的默认尺寸均为 'small',弹框的初始 z-index 为 3000。

安装vue-router

参考vue-router网站:https://router.vuejs.org/zh/

  1. 安装
npm install vue-router
#OR
yarn add vue-router
  1. 引用
    在src目录下新建文件夹 router 用来做 路由 的配置
    在main.js文件里写入下面代码
import router from './router'  // src/router/index.js

new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>'
})

此时启动如果报错,参考下图解决


router-error1.png
  1. 使用示例

按照实际项目开发,修改初始化目录,一般逻辑如下

router dir path.png

具体参考为本文档同步的 github 项目代码

Echarts 图表

参考文档: https://echarts.apache.org/zh/tutorial.html#5%20%E5%88%86%E9%92%9F%E4%B8%8A%E6%89%8B%20ECharts

也可以使用 echarts-for-vue: https://gitee.com/mgb/echarts-for-vue

  1. 安装echarts官方版本
npm install echarts --save
# OR
yarn add echarts --save
  1. 全局引用
    mian.js文件里添加
import * as echarts from 'echarts'

Vue.prototype.echarts = echarts // 把echarts放在 Vue 的原型上,以便全局都可以访问
  1. 使用示例

手动修改路由地址访问demo示例: http://localhost:8080/demo/echartsdemo

<template>
  <div class="echarts-demo-page"> <div id="my-chart-demo"></div> </div>
</template>
<script>
export default {
  name: 'echartsdemo',
  data () {
    return {
      options: {
        title: { text: 'ECharts 入门示例' },
        tooltip: {},
        legend: { data:['销量'] },
        xAxis: { data: ["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"] },
        yAxis: {},
        series: [{ name: '销量', type: 'bar', data: [5, 20, 36, 10, 10, 20] }]
      }
    }
  },
  mounted () { this.initEcharts() },
  methods: {
    initEcharts () {
      const mychart = this.echarts.init(document.getElementById('my-chart-demo'))
      mychart.setOption(this.options)
    }
  }
}
</script>
<style lang="css" scoped>
    #my-chart-demo { width: 600px; height: 400px; border: 1px solid red; margin: 0 auto;}
</style>
echart view.png

axios

Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。

中文文档: http://www.axios-js.com/

1.安装

npm install axios
#OR
yarn add axios
  1. 引入 (如需进一步封装,请参考步骤 4)

在 src 目录下新建文件夹 api 该目录用来放axios请求的相关内容
api/index.js 是aixos做ajax的人口文件
api/http 是封装 axios 的请求响应拦截相关的配置内容
api/demo 是项目正常开发使用的 demo 功能相关的 接口 内容
如此设计目录会更方便开发维护


import axios.png

在 main.js 文件里面 引入 api/http 并把它指向到 Vue 的原型上

import axios from './api/http'

Vue.prototype.axios = axios
就可以全局 this.axios 访问 axios 了
  1. 使用示例
<template>
  <div>axios demo</div>
</template>
<script>
import api from '@/api/demo'
export default {
  name: 'axiosdemo',
  mounted () { this.getData()},
  methods: {
    getData () {
      const params = {method: api.echartdemo, name: 'tom', pwd: '123456'}
      this.axios.post(params).then(res => {
        console.log(res)
      }).catch(err => {
        console.log(err)
      })
    }
  }
}
</script>

发送给服务器的请求内容


axios demo.png

下面是官方文档的示例


axios demo.png

/** 4. 在 axios 的基础上进一步封装
封装思路:
(1). 统一处理请求响应拦截,把请求api安装功能分成不同的模块,这个思路与步骤2相同
(2). 由于axios的response是Promise,可以进行二次封装,从而返回的不再是默认Promise而是我们再次封装的response 主体,封装的 response 依然是一个 Promise
(3).统一处理请求异常
(4).使用 aysnc await 解决异步带来的问题 **/

VUEX

参考官方文档: https://vuex.vuejs.org/zh/

  1. 安装
npm install vuex --save
#OR
yarn add vuex
  1. 引用
    在 src 目录下 新建 store 文件夹,用来放 vuex state 代码
    在 src/store 目录下 新建 index.js 和 mutation-types.js


    store path.png

在 mian.js 中全局引入 store

#main.js
import store from '@/store'

# 在Vue实例里面 把 store 添加进去
new Vue({
  el: '#app',
  router,
  store,
  components: { App },
  template: '<App/>'
})
  1. 使用示例
# src/store/index.js 写入如下代码


/*
* vuex 状态管理的 入口 文件
* 我们可以根据项目的实际功能或者需求 把 state 分开管理
*/

import Vue from 'vue'
import Vuex from 'vuex'

import { SET_COUNT_SHORT, ACT_COUNT_SHORT } from './mutation-types'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    count: 0 // 初始化 count 状态值
  },

  /* count 状态 要改变 必须触发 moutations 的动作 commit 是触发 mutations 的语法糖 */
  mutations: {
    /* 添加一个 count plus mutations 用来模拟 同步更新 count 状态 */
    setCountPlus (state, val) {
      state.count += val
    },

    /* 添加一个 count short mutations 用来模拟 异步更新 count 状态 */
//  使用常量替代 Mutation 事件类型, 但不是必须这么用
    [SET_COUNT_SHORT] (state, val) {
      state.count -= val
    }
  },

  /* 异步 修改 count 状态, 但这里的异步只是 语法糖, 
    最终还是要 触发 mutations 动作才能完成 count 状态的更新
    触发 actions 的语法糖是 dispath
   */
  actions: {
    //  使用常量替代 Mutation 事件类型, 但不是必须这么用
    [ACT_COUNT_SHORT] (context, val) {
      context.commit('SET_COUNT_SHORT', val)
    }
  }
})
#  src/store/mutation-types.js 写入如下代码

/* 使用常量替代 Mutation 事件类型, 但不是必须这么用 */
export const SET_COUNT_SHORT = 'SET_COUNT_SHORT'
export const ACT_COUNT_SHORT = 'ACT_COUNT_SHORT'

调用 在auth组件

# 可以在标签里面直接写入
<div>{{this.$store.state.count}}</div>

# 也可使用 computed 一下
<div>{{count}}</div>
computed: {
  count () {
      return this.$store.state.count
  }
}

修改 在 login 组件

# 触发 mutations 的方法同步修改
this.$store.commit('setCountPlus', 8)

# 触发 actions 的方法异步修改
this.$store.dispatch('ACT_COUNT_SHORT', 6)

分环境运行和打包

我用过三种: cross-env & dotenv & 和@vue/cli配置好的环境变量
npm cross-env 网站: https://www.npmjs.com/package/cross-env
npm dotenv 网站: https://www.npmjs.com/package/dotenv
vue cli 环境变量: https://cli.vuejs.org/zh/guide/mode-and-env.html

cross env npm.png
dotenv npm.png
vueclienv.png

我们这里就近水楼台使用 vue cli 封装好的

  1. 在根目录下新建 .env .env.test .env.prod 分别代表着开发 测试 生产 环境对应的后台地址


    env path.png
  1. 在对应的 env 文件里面 写入对应的 环境变量 地址
  VUE_APP_URL = 'http://0.0.0.0:8080' # 你的对应环境的后台地址
env set detail.png
  1. 修改启动配置 package.json
"scripts": {
    "start": "vue-cli-service serve --mode test",
    "start--test": "vue-cli-service serve --mode test",
    "start--dev": "vue-cli-service serve --mode dev",
    "start--prod": "vue-cli-service serve --mode prod",
    "build": "vue-cli-service build --mode prod",
    "build--test": "vue-cli-service build --mode test",
    "build--prod": "vue-cli-service build --mode prod",
    "lint": "vue-cli-service lint"
  }
修改之前.png
修改之后.png
  1. 调取环境变量
# 在api的入口文件index.js里面 把写死的 base 改成 动态的
  process.env.VUE_APP_URL
base url.png
  1. 启动打包指令
# 启动
yarn start # 默认启动测试
yarn start--test
yarn start--prod

# 打包
yarn build # 按上面的改造 默认打包 prod
yarn build--test
yarn build--prod

下图能正常输出对应变量值, 就是配置成功了。


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

推荐阅读更多精彩内容