1. 程式人生 > >npm, webpack, vue-cli, vue-x, axios

npm, webpack, vue-cli, vue-x, axios

1,什麼是node.js,以及npm

簡單的來說Node.js就是執行在服務端的JavaScript,是基於Chrome V8引擎的.npm是Node.js包的管理工具.

2,npm的安裝和更新

Node.js下載安裝Node.js官網下載安裝.npm自帶的包管理工具.

  • node - v 檢視Node.js版本資訊;
  • npm - v 檢視npm版本資訊

更新到npm指定版本:

npm常用操作

之前我們用jQuery或者Bootstrap用cdn或者直接手動下載並放入專案,而且要管理版本.有了npm,我們管理自己的依賴包以及版本更加簡單

到自己專案下,進行下列命令:

  • npm init -y 輸入-y使用預設配置項生成package.json檔案.
  • npm i [email protected] 簡寫install為 i 下載依賴 不寫@預設最新版本
  • npm uninstall jquery 解除安裝依賴包
  • npm update jquery 更新依賴包
  • npm list 列出已安裝的依賴
  • npm install webpack--D儲存為開發環境依賴
  • 老版本需要--save引數 現在不需要來了

我們的專案目錄下會生成一個node_modules目錄,我們用npm下的包會在這個目錄下.

我們所有的依賴資訊放在package.json檔案中,包括我們所有的依賴以及版本

如果我們刪掉node_modules目錄,可以使用npm i 來下載所有依賴.

3,npm常用配置

當我們用npm init的時候用了引數-y, 如果不用-y我們可以進行一些配置,在我們的package.json檔案中有很多配置項

  • name 專案名字 中間不能有空格只能用小寫
  • version 專案版本
  • description 專案描述資訊
  • main 專案的入口檔案
  • scripts指定命令的快捷方式 npm run test  test是scripts裡的鍵名 值為具體命令
  • auther 作者
  • license 許可證
  • dependencies 生成環境依賴的包及版本資訊
  • devDependencies 開發環境的依賴

4,webpack3

webpack:是一個模組打包器,他將根據模組的依賴關係靜態分析,然後將這些模組按照指定的規則生產成靜態資源,

4.1,安裝和配置

webpack是跑在Node.js環境下的,所以確定有node環境

安裝方式:

  • npm install webpack- g 全域性安裝
  • webpack<要打包檔案><打包後文件>全域性這種方式進行打包
  • npm install webpack 在自己的專案下npm init後再下載webpack這就是區域性安裝
  • node_modules/.bin/webpack<要打包檔案><打包後文件>專案裡要打包檔案是入口檔案
  • 路徑太長 太煩 可以自定義命令 在package.json中檔案的scripts下面定義

4.2,entry和output

entry是入口檔案,output是出口檔案,我們可以把命令寫在webpack.config.js中

 

module.export = {
    // 所有的入口檔案
    entry: {
         home: './main.js', 
         login: './login.js',
    }, 
    // 出口檔案  
    output: {
         filename: '[name].bundle.js',
         path: __dirname + '/dist',
    }       
}
// backage.json  下的scripts
scripts: {
     "pack": "node_moudles/.bin/webpack --watch"
}

//  執行命令
npm  run pack

 

5,webpack4

webpack的新特性

5.1,webpack不在單獨使用,需要webpack-cli

  • 全域性安裝  npm install webpack   webpack-cli-g-D
  • 區域性安裝  npm install webpack   webpack-cli- D

5.2,增加區分模式(development, production)

  • webpack  mode development/production進行模式切換
  • development開發者模式,打包預設不壓縮程式碼
  • production 生產者模式 上線時使用,壓縮程式碼,預設是這個模式

5.3,固定入口目錄為src,與入口預設檔案index.js,打包後文件在新增的dist目錄下

  當只有一個入口檔案也就是src/index.js時,無需增加webpack.config.js

6,Vue-cli

Vue-cli是官方提供的快速構建這個單頁面應用的腳手架

  • 前提是已經安裝了node.js否則npm都用不了
  • 1,使用npm全域性安裝vue-cli,
    •   npm install-g vue-cli
  • 2,安裝完成後在自己的工作空間裡
    •   vue init webpack vue-demo   輸入命令後進入安裝階段,需要使用者輸入一些資訊
  • 3,切換到我們的目錄下
    •   cd vue-demo
    •        npm run dev

6.1,目錄結構

  • build裡面是一些操作檔案,使用npm run *時其實執行的就是這裡的檔案
  • config配置檔案,執行檔案需要的配置資訊
  • src資原始檔,所有的元件以及所有的圖片都在這個資料夾下
  • node_modules 專案依賴包
  • static靜態檔案
  • package.json依賴包的json檔案

7,Vue-cli配置jquery,bootstrap

7.1,下載安裝

  • npm install jquery
  • npm install  bootstrap

7.2,修改build/webpackage.base.conf.js

const webpack = require('webpack')
// 在module.exports裡新增外掛
plugins: [
    new webpack.ProvidePlugin({
      $: "jquery",
      jQuery: "jquery",
      "windows.jQuery": "jquery",
      // Popper: ['popper.js', 'default']
    })
],
//  *******下面是如果手動下載bootstrap用的*******
resolve: {
    extensions: ['.js', '.vue', '.json'],
    alias: {
      'vue$': 'vue/dist/vue.esm.js',
      '@': resolve('src'),
      // 如果是手動下載的bootstrap需要新增這個配置
      // 'assets': path.resolve(__dirname, '../src/assets'),
      // 'jquery': 'jquery/src/jquery'
    }
  },
View Code

7.3,修改主程式的就是檔案

import $ from 'jquery'
import 'bootstrap/dist/css/bootstrap.min.css'
import 'bootstrap/dist/js/bootstrap.min.js'

8,vue-cli 3.0

8.1,下載安裝

  • npm [email protected]/cli
  • 報錯 npm error 可執行下面命令
  • npm cache clean--force && npm cache verify

8.2,建立專案

  • vue create 專案名
  • 之後會出現很多選項,根據自己的偏愛去選擇

8.3,目錄結構及其配置檔案

  • vue-cli3目錄更加簡單
  • 我們手動在專案下建立vue.config.js的配置信

8.4,vue-cli3配置jquery.bootstrap

  據說和vue-cli2一樣

總之:在執行vue-cli和webpack都要執行node.js

  1,先下載node.js這是一個步驟如下圖

一,在命令列輸入命令:

  node.js/npm

    npm  

    管理工作目錄   --->   npm init -y

    下載包   ------>npm i [email protected]

    解除安裝      ------->npm uninstall xxxx

    更新      ------->npm update xxxx

  webpack

    下載      -------->npm i webpack webpack-cli

    打包預設的入口檔案   ------->src目錄下的index.js

    出口檔案   ------->dist目錄的main.js

  vue-cli    幫助開發人員快速搭建專案的腳手架工具

    下載      --------->npm i vue-cli

    用vue-cli幫助我們建立專案   ------->vue init webpack xxxx

    啟動專案   -------->npm run dev 

9,vuex

  • vuex是專門Vue.js設計的集中狀態管理架構,我們把它理解為在data中需要共享給其他元件使用額度部分,Vuex和單純的全域性物件有以下不同:
    1. Vuex的狀態儲存是響應式的,當Vue元件從store中讀取狀態的時候,若store中的狀態發生了變化,那麼響應的元件也會相應的得到高效更新(一榮俱榮,一損俱損,所以說Vuex的儲存是響應式的)
    2. 不能直接改變store中的狀態,改變store中的狀態唯一途徑就是顯示的提交(commit)mutation,這樣使得我們可以方便的跟蹤每一個狀態的變化,從而讓我們能夠實現一些工具來幫助我們瞭解我們的應用
  • vuex的安裝和使用

 命令列:npm i vuex

// 第一步匯入vuex
import vuex from "vuex"
// 第二步vue使用vuex
vue.use(vuex)
// 第三步例項化倉庫
new vuex.Store({
   state: {},

   getter: {},

   mutations:{}   
})

// 第四步例項化一個Vue物件
// 註冊倉庫
new Vue({
   el:"#app".
    store        
})

 

  • 獲取倉庫資料
    1. this.$store.state.xxx
    2. this.$store.getters.xxx
  • 改變倉庫中的資料
    1. 元件向倉庫提交修改資料
      1. this.$store.commit("事件名稱", data)
    2. 在倉庫的mutations中
      1. mutations: {"事件名稱":function(state, data){修改state中的資料}}
    3. 注意計算屬性
      1. 倉庫中的資料建議都放在計算屬性中
  • 引數說明State
    • state是儲存我們data中需要共享的資料,由於Vuex的儲存是響應式的,從store例項中讀取狀態的最簡單方式,就是在計算屬性中返回某個狀態.this.$store.state.count

 

// 建立一個元件
const Counter = {
  template: `<div>{{ count }}</div>`,
  computed: {
    count(){
      return this.$store.state.count
    }
  }
};

 

  • Getter引數的說明
  • 有時候我們需要從store中的state中派生出一些狀態,例如對資料進行簡單的計算,並且很多元件都需要用到此方法,要麼複製這個函式,要麼抽取到一個公共函式,多出匯入,但是vuex提供了更加方便的方法 ,getter,就像計算屬性一樣,getter的返回值會根據它的依賴被快取起來,只有它的依賴發生改變時,才會重新計算,
  • Getter會接收state作為第一個引數

 

import Vue from 'vue'
import Vue_x from "vuex"

Vue.use(Vue_x);

export default  new Vue_x.Store({
   state: {
     count: 20,
   },
  // 通過 this.$store.getters.my_func
  getters: {
    my_func: function (state) {
      return state.count * 2
    }
  },

});

 

  • Getters也可以接收getters為第二個引數
import Vue from 'vue'
import Vue_x from "vuex"

Vue.use(Vue_x);

export default  new Vue_x.Store({
   state: {
     count: 20,
   },
  // 通過 this.$store.getters.my_func
  getters: {
    my_func: function (state) {
      return state.count * 2
    },
    // 通過 this.$store.getters.my_func_count
    my_func_count: function (state, getters) {
      return getters.my_func.length
    }
  },

});
  • Mutation
  • 更改vuex中的store中的狀態的唯一方法是提交mutation.
  • 每個mutation都有一個字串的事件型別(type),和一個回撥函式handler
  • 也就是說我們要觸發mutation中定義的方法(type),然後才會執行這個方法(handler)
  • 這個方法就是我們要更改狀態的地方, 它會接收state為第一個引數,後面接收其他引數

 

import Vue from 'vue'
import Vue_x from "vuex"

Vue.use(Vue_x);

export default  new Vue_x.Store({
   state: {
     count: 20,
   },
  // 需要通過 this.$store.commit('increment', 10)
  mutations: {
     increment (state, n) {
       // 變更狀態
       state.count += n
     }
  }

});

 

  • Mutation需要遵循Vue的響應規則
  • 既然Vuex中的store中的狀態是響應式的, name當我們狀態變更時, 監視狀態的vue元件也會更新.這就意味著vuex中的mutation也需要與使用vue一樣注意一些注意事項 :
    1. 最好提前在你的 store中初始化好所有需要的屬性
    2. 當物件需要新增屬性時,你應該使用:
      1. Vue.set(obj, 'newProp', 123)
      2. 以新物件代替老物件 state.obj={...state.obj, newProp:123}

10,axios的簡單使用

  1. 基於Promise的HTTP請求客戶端, 可以同時在瀏覽器額 node.js中使用 
  2. 使用npm安裝axios:   npm  install  axios -D
  3. 基本的配置
  4. // main.js
    import axios from "axios"
    
    Vue.prototype.$axios = axios
    
    // 元件中
    methods: {
         init () {
            this.$axios({
                 method: "get",
                 url: "/user"
            })
        },
    };
    View Code

     

  5. 基本的使用
    • get請求
test(){
          this.$axios.get(this.$store.state.apiList.course,{
            params: {
              id: 123,
            }
          }).then(function (response) {
            // 請求成功回撥函式
          }).catch(function (response) {
            // 請求失敗的回撥函式
          })
}
    • post請求
test(){
          this.$axios.post(this.$store.state.apiList.course,{
              course_title: "Python",
              course_price: "19.88"
          }).then(function (response) {
            // 請求成功回撥函式
          }).catch(function (response) {
            // 請求失敗的回撥函式
          })
}
    • 傳送多個併發請求
function getCourse(){
          return this.$axios.get('/course/12')
        }
function getCourse_all() {
          return this.$axios.get('/course')
        }
this.$axios.all([getCourse_all(),getCourse()])
          .then().catch()
    • axios.request那個人喜歡的
methods: {
          init(){
            var that = this
            this.$axios.request({
              url: that.$store.state.apiList.course,
              method: 'get'
            }).then(function (data) {
              if (data.status === 200){
                  that.courseList = data.data
              }
            }).catch(function (reason) {
              console.log(reason)
            })
          }
},
  •  axios是實現ajax技術的工具
    • 下載: npm i axios
    • 匯入: import axios from "axios"
    • 在vue的原型鏈中加入方法:Vue.prototype.$axios = axios
    • 傳送請求:this.$axios.request({url, method}).then(function(){}).catc(function(){})