美文网首页
@vue/cli 项目初始化起手式

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

作者: 东方三篇 | 来源:发表于2021-01-27 11:48 被阅读0次

    本文档对应的代码库: 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

    相关文章

      网友评论

          本文标题:@vue/cli 项目初始化起手式

          本文链接:https://www.haomeiwen.com/subject/xkqizktx.html