怎么用Vuecli 3.0快速創建項目


一.安裝

1.安裝node.js,這里需要注意的是,Vue CLI 3需要 nodeJs ≥ 8.9,所以我們去中文官方下載地址:http://nodejs.cn/download/ ,下載最新版本即可;

2.安裝vue-cli3.0版本:

兩種情況:1.你之前安裝過vue-cli3.0之前的版本,需卸載之前版本,再安裝新版本;

卸載舊版本:

npm uninstall vue-cli -g

安裝新版本:

npm install -g @vue/cli

2.你之前沒有安裝過vue-cli3.0之前的版本,直接安裝新版本即可;

3.安裝nrm,有時候國外資源太慢,使用這個就可以快速地在 npm 源間切換:

1.全局安裝nrm

npm install -g nrm

2.查看當前使用源

nrm current

3.查看可選源(帶*號即為當前使用源)

nrm ls

4.切換源

以淘寶鏡像為例:

nrm use taobao

5.測試源速度(即響應時間)

比如:測試官方源和淘寶源的響應時間

nrm test npm

nrm test taobao

可以得出,淘寶源的速度要遠快於官方源,安裝完nrm之后,我們進行創建項目,我們下載和搭建的速度就會快很多,才能稱上快速兩個字

 

二.創建項目

1.新建項目

vue create jjrweb //后面為文件名 不支持駝峰(含大寫字母)

彈出如下界面:

1.第一個“ my-default”是我之前保存的預設配置,等下下面會介紹到;

2.default(babel,eslint):默認套餐,提供 babeleslint 支持;

3.Manually select features:自己去選擇需要的功能,提供更多的特性選擇。比如如果想要支持 TypeScript ,就應該選擇這一項;

如果想要更多的支持,這里我選擇Manually select features:切換到這項,按下 enter 鍵選中,

彈出如下界面:

可以多選:使用方向鍵在特性選項之間切換,使用空格鍵選中當前特性,使用 a 鍵切換選擇所有,使用 i 鍵翻轉選項。

( ) Babel //轉碼器,可以將ES6代碼轉為ES5代碼,從而在現有環境執行。 
( ) TypeScript// TypeScript是一個JavaScript(后綴.js)的超集(后綴.ts)包含並擴展了 JavaScript 的語法,需要被編譯輸出為 JavaScript在瀏覽器運行,目前較少人再用
( ) Progressive Web App (PWA) Support// 漸進式Web應用程序
( ) Router // vue-router(vue路由)
( ) Vuex // vuex(vue的狀態管理模式)
( ) CSS Pre-processors // CSS 預處理器(如:less、sass)
( ) Linter / Formatter // 代碼風格檢查和格式化(如:ESlint)
( ) Unit Testing // 單元測試(unit tests)
( ) E2E Testing // e2e(end to end) 測試

這里我選擇的為圖片中的選項,回車:

彈出如下界面:

是否使用history router:這里我選擇NO,后期如果要改成history,手動去路由里添加即可,回車;

彈出如下界面:

css預處理器,主要為css解決瀏覽器兼容、簡化CSS代碼 等問題,你習慣使用哪種選擇哪種即可,這里我選擇Less

彈出如下界面:

ESLint:提供一個插件化的javascript代碼檢測工具,ESLint + Prettier //使用較多,這里我選擇ESLint + Prettier

彈出如下界面:

何時檢測:這里我選擇Lint on save  保存時檢測

彈出如下界面:

如何存放配置 :這里我選擇圖中選擇

彈出如下界面:

是否保存本次配置(y:記錄本次配置,然后需要你起個名; n:不記錄本次配置):這里我選擇NO,上文中正好說到這個,如果你選擇yes,下次創建項目的時候就可以選擇按之前模板來

彈出如下界面:

搭建完成:可以進入到該項目文件夾,然后運行項目;

 

2.項目結構

精簡了很多,但還是和vue2.0有很多區別的,基本的用法變化不是特別大,如圖:

 

 

3.vue-cli2.0和vue-cli3.0的區別

1.vuex(狀態管理):

vue cli 2 中 vuex是搭建完成后自己npm install的,並不包括在搭建過程中。可以看到vue cli 2的vuex默認文件夾(store)又包含了三個js文件:action(存放一些調用外部API接口的異步執行的的方法,然后commit mutations改變mutations 數據)、index(初始化mutations 數據,是store的出口)、mutations(處理數據邏輯的同步執行的方法的集合,Vuex中store數據改變的唯一方法commit mutations)

vue cli 3 中vuex是包含在搭建過程供選擇的預設。vue cli 3 中默認只用一個store.js代替了原來的store文件夾中的三個js文件。action、mutations、state以及store 的 getters 的用法有很多

2.router (路由):

vue cli 2 :“ router/index.js

vue cli 3:router.js”(用法和做的事都一樣)

3.去掉 static  、 新增 public 文件夾

vue cli 2 static 是 webpack 默認存放靜態資源的文件夾,打包時會直接復制一份到dist文件夾不會經過 webpack 編譯

vue cli 3  :摒棄 static 新增了 public 。vue cli 3 中“靜態資源”兩種處理方式:

經webpack 處理:在 JavaScript 被導入或在 template/CSS 中通過“相對路徑”被引用的資源會被編譯並壓縮

不經webpack 處理:放置在 public 目錄下或通過絕對路徑被引用的資源將會“直接被拷貝”一份,不做任何編譯壓縮處理

4.index.html :

vue cli 2 :“index.html ”

vue cli 3 :“public/index.html ”此模板會被 html-webpack-plugin 處理的

5.src/views:

vue cli 3 的 src文件夾 新增 views文件夾 用來存放 “頁面”,區分 components(組件)

6.去掉 build(根據config中的配置來定義規則)、config(配置不同環境的參數)文件夾 :

vue cli 3 中,這些配置 你可以通過 命令行參數、或 vue.config.js (在根目錄 新建一個 vue.config.js 同名文件)里的 devServer 字段配置開發服務器

7.babel.config.js:

配置Babel 。Vue CLI 使用了 Babel 7 中的新配置格式 babel.config.js。和 .babelrc 或 package.json 中的 babel 字段不同,這個配置文件不會使用基於文件位置的方案,而是會一致地運用到項目根目錄以下的所有文件,包括 node_modules 內部的依賴。官方推薦在 Vue CLI 項目中始終使用 babel.config.js 取代其它格式。

8.根目錄的一些其他文件的改變:

之前所有的配置文件都在vue create 搭建時preset預設 或者 后期可以通過 命令參數 、 vue.config.js 中配置

 

三.項目編寫

1.在package.json文件中添加

"scripts": {
    "serve": "vue-cli-service serve --mode development",
    "build": "vue-cli-service build --mode product",
    "test": "vue-cli-service build --mode test",
    "lint": "vue-cli-service lint",
    "test:unit": "vue-cli-service test:unit"
  },

2.在根目錄下創建.env.development文件,並配置

# 開發環境
NODE_ENV = 'development'

# base api
VUE_APP_BASE_API = '/api'
VUE_APP_MOCK = '/mock'

VUE_APP_BASE_HTTP_MOCK = 'http://11.3.120.181:8989'
VUE_APP_BASE_HTTP = 'http://11.3.120.181:8765'

3.在根目錄下創建.env.test文件

# 測試環境
NODE_ENV = 'test'

# base api
VUE_APP_BASE_API = '/api'
VUE_APP_BASE_HTTP = 'http://11.3.120.181:8765'

4.在根目錄下創建.env.product文件

# 生產環境
NODE_ENV = 'product'

#業務接口地址
VUE_APP_BASE_API = '/api'
#VUE_APP_API_HOST = 'https://www.shenchan.com'
VUE_APP_API_HOST = 'http://10.3.320.201:8765'

5.在main.js里配置api變量

import api from './http/index'
import globalData from './utils/globalData'

Vue.config.productionTip = false;

Vue.use(api)

// 設置全局變量
Vue.prototype.$globalData = globalData

6.新建一個utils文件夾,里面建立一個globalData.js文件

const globalData = {
  API_HOST: process.env.VUE_APP_API_HOST
}
export default globalData

7.新建一個http文件夾,里面建立三個api.js,index.js,list.js文件,以及一個module文件夾里面存放login.js接口

api.js:設置接口配置和攔截器的編寫

import axios from 'axios'
// import { getToken } from '@/utils/auth'
import globalData from '@/utils/globalData'
// create an axios instance
const service = axios.create({
  baseURL: globalData.API_HOST, // url = base url + request url
  withCredentials: false, // send cookies when cross-domain requests
  timeout: 10000 // request timeout
})

// request interceptor
service.interceptors.request.use(
  config => {
    // mock數據和接口數據區分
    if (config.method === 'get' && config.params) {
      console.log('1111')
      // config.params.applytime = new Date()
    }
    if (process.env.NODE_ENV === 'product') {
      config.url = process.env.VUE_APP_API_HOST + config.url
      console.log('2222'+config.url)
    } else {
      config.url = process.env.VUE_APP_BASE_HTTP + process.env.VUE_APP_BASE_API + config.url
      console.log('3333'+config.url)
    }
    console.log('請求地址:' + config.url)
    return config
  },
  error => {
    // do something with request error
    console.log(error) // for debug
    return Promise.reject(error)
  }
)

// response interceptor
service.interceptors.response.use(
  response => {
    console.log('返回結果:' + response)
    const res = response.data
    console.log('4444' + res)
    if (res !== '') {
      if (process.env.NODE_ENV === 'development') {
        console.log('開發環境'+res.msg) // 提示
      }
      return Promise.reject(res.msg)
    } else {
      return res
    }
  },
  error => {
    console.error(error)
    if (error.response.data.code === 401) {
      console.log('登錄異常,請重新登錄') // 提示,然后在此處添加跳轉到登錄
      return false
    }
    if (process.env.NODE_ENV === 'development') {
      console.log(error.response.data + '開發環境err') // 提示
    }
    return Promise.reject(error)
  }
)

export default service

index.js:設置請求名頭

import list from './list'

const busineApi = Vue => {
  if (busineApi.installed) {
    return
  }
  busineApi.installed = true
  Object.defineProperties(Vue.prototype, {
    // 此處掛載在 Vue 原型的 $list 對象上
    $hjApi: {
      get () {
        return list
      }
    }
  })
}
export default busineApi

list.js:接口模塊的引入

// Saas系統
import login from './module/login' // 登錄模塊

const allApi = Object.assign(login)

export default allApi

login.js:接口定義

import axios from '../api'

// 登錄
export const login = (data = {}) => {
  return axios({
    url: '/auth/oauth/token',
    method: 'get',
    params: data
  })
}


export default {
  login
}

8.頁面里面請求寫法

methods: {
    // 登錄
    login () {
      console.log('abcd')
      // 登錄接口
      this.$hjApi.login({
        username: 'hjhj',
        password: '123456',
      }).then(res => {
        console.log(res+'登錄成功')
      }).catch(err => {
        console.log(err)
      })
    }
  }

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM