構建Vue+Ionic+Cordova項目,開發全平台APP系列教程


目錄

一、基礎環境准備

二、構建VUE項目

三、配置Ionic界面框架

四、構建Cordova項目

五、整合Cordova、Vue、Ionic

 

一、基礎環境准備

1、下載 & 安裝vscode (強大的前后端開發工具)

2、下載 & 安裝nodejs (前端代碼打包編譯專用)

3、下載 & 安裝 git (強大的代碼托管工具)

4、打開vscode,安裝淘寶鏡像(推薦國內線路,安裝更加穩定,迅速)

npm i -g cnpm --registry=https://registry.npm.taobao.org

5、你需要知道的幾個官網

Vue:https://cn.vuejs.org/

Ionic:https://ionicframework.com

Cordova:https://cordova.axuer.com/

 6、你需要知道的npm常用指令說明

1. npm install

安裝node_module以及還原package.json內聲明的所有包

2. npm install xxxpackage

安裝xxx包到node_module目錄下,但是不會更新package.json文件,因此另外一個人拉取到代碼后無法使用npm install進行包還原,需要手動指定重裝

3. npm install --save xxxpackage

安裝xxx包到node_module目錄下,同時更新package.json的dependencies(生產/運行環境)配置,運行時如果需要就用這個

4. npm install --save-dev xxxpackage

安裝xxx包到node_module目錄下,同時更新package.json的devDependencies(開發/編譯環境),但是不會更新dependencies(生產/運行環境)配置,僅編譯時需要就用這個

5. npm install --global xxxpackage

安裝xxx包到全局,不同項目之間可以共享該包,就無需每個項目都安裝

6. 簡寫

install可以簡寫為i,例如:npm install 簡寫 npm i

--save可以簡寫為-S,例如:npm install --save xxxpackage 簡寫為 npm i -S xxxpackage

--save-dev可以簡寫為-D,例如:npm install --save-dev xxxpackage 簡寫為 npm i -D xxxpackage

 --global可以簡寫為-g,例如:npm install --global xxxpackage 簡寫為 npm i -g xxxpackage

 

返回目錄

 

二、構建Vue項目

1. 安裝vue 腳手架(當前最火的MVVM前端架構,國人精心打造,推薦使用)

cnpm i -g vue-cli

2. 安裝webpack

cnpm i -g webpack

4. 創建webpack模板項目,一路回車以及按“Y”即可(假如無法使用vue指令,可能是因為沒有給系統執行腳本的權限,打開PowerShell,執行:set-ExecutionPolicy RemoteSigned 命令,再輸入Y回車即可)

vue init webpack drea.demo.app

5. 進入項目

cd drea.demo.app

 6、完善.eslintrc.js文件中的規則(完善默認代碼規范,方便后續開發)

rules: {
    "indent": ["off", 2],
    // allow async-await
    'generator-star-spacing': 'off',
    // allow debugger during development
    'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
    // allow paren-less arrow functions
    'arrow-parens': 0,
    "no-unused-vars": [0],
    "no-undef": 0,
    // 關閉語句強制分號結尾
    "semi": [0],
    "spaced-comment": [0],
    // 函數定義時括號前面要不要有空格
    "space-before-function-paren": 0,
    //引號風格
    "quotes": [0, "single", "avoid-escape"],
    //空行最多不能超過100行
    "no-multiple-empty-lines": [0, { "max": 10 }],
    //關閉禁止混用tab和空格
    "no-mixed-spaces-and-tabs": [0],
    //關閉文件末尾強制回車
    'eol-last': 0,
  }

 7、初始化依賴項

cnpm i

8、運行項目

npm run dev

9、效果如下

 

返回目錄

 

三、配置Ionic界面框架

 1、安裝ionic需要的三個依賴包

cnpm i @ionic/vue @ionic/core ionicons@4.5.9-1 --save

2、修改src/main.js文件,新增如下代碼

import Ionic from '@ionic/vue'
import '@ionic/core/css/ionic.bundle.css'

Vue.use(Ionic)

3、修改src/components/HelloWorld.vue,代碼如下

<template>
  <div>
    <br />
    <IonVuePage :title="'Alert'" style="text-algin:center;">
      <ion-button @click="presentAlert">Show Alert</ion-button>
      <ion-button @click="presentAlertMultipleButtons">Show Alert (multiple buttons)</ion-button>
      <ion-button @click="presentAlertConfirm">Show Alert (confirm)</ion-button>
      <ion-button @click="presentAlertPrompt">Show Alert (prompt)</ion-button>
      <ion-button @click="presentAlertRadio">Show Alert (radio)</ion-button>
      <ion-button @click="presentAlertCheckbox">Show Alert (checkbox)</ion-button>
    </IonVuePage>
  </div>
</template>

<script>
export default {
  methods: {
    presentAlert() {
      return this.$ionic.alertController
        .create({
          cssClass: "my-custom-class",
          header: "Alert",
          subHeader: "Subtitle",
          message: "This is an alert message.",
          buttons: ["OK"]
        })
        .then(a => a.present());
    },

    presentAlertMultipleButtons() {
      return this.$ionic.alertController
        .create({
          cssClass: "my-custom-class",
          header: "Alert",
          subHeader: "Subtitle",
          message: "This is an alert message.",
          buttons: ["Cancel", "Open Modal", "Delete"]
        })
        .then(a => a.present());
    },

    presentAlertConfirm() {
      return this.$ionic.alertController
        .create({
          cssClass: "my-custom-class",
          header: "Confirm!",
          message: "Message <strong>text</strong>!!!",
          buttons: [
            {
              text: "Cancel",
              role: "cancel",
              cssClass: "secondary",
              handler: blah => {
                console.log("Confirm Cancel:", blah);
              }
            },
            {
              text: "Okay",
              handler: () => {
                console.log("Confirm Okay");
              }
            }
          ]
        })
        .then(a => a.present());
    },

    presentAlertPrompt() {
      return this.$ionic.alertController
        .create({
          cssClass: "my-custom-class",
          header: "Prompt!",
          inputs: [
            {
              placeholder: "Placeholder 1"
            },
            {
              name: "name2",
              id: "name2-id",
              value: "hello",
              placeholder: "Placeholder 2"
            },
            {
              name: "name3",
              value: "http://ionicframework.com",
              type: "url",
              placeholder: "Favorite site ever"
            },
            // input date with min & max
            {
              name: "name4",
              type: "date",
              min: "2017-03-01",
              max: "2018-01-12"
            },
            // input date without min nor max
            {
              name: "name5",
              type: "date"
            },
            {
              name: "name6",
              type: "number",
              min: -5,
              max: 10
            },
            {
              name: "name7",
              type: "number"
            },
            {
              name: "name8",
              type: "password",
              placeholder: "Advanced Attributes",
              cssClass: "specialClass",
              attributes: {
                maxlength: 4,
                inputmode: "decimal"
              }
            }
          ],
          buttons: [
            {
              text: "Cancel",
              role: "cancel",
              cssClass: "secondary",
              handler: () => {
                console.log("Confirm Cancel");
              }
            },
            {
              text: "Ok",
              handler: () => {
                console.log("Confirm Ok");
              }
            }
          ]
        })
        .then(a => a.present());
    },

    presentAlertRadio() {
      return this.$ionic.alertController
        .create({
          cssClass: "my-custom-class",
          header: "Radio",
          inputs: [
            {
              type: "radio",
              label: "Radio 1",
              value: "value1",
              checked: true
            },
            {
              type: "radio",
              label: "Radio 2",
              value: "value2"
            },
            {
              type: "radio",
              label: "Radio 3",
              value: "value3"
            },
            {
              type: "radio",
              label: "Radio 4",
              value: "value4"
            },
            {
              type: "radio",
              label: "Radio 5",
              value: "value5"
            },
            {
              type: "radio",
              label: "Radio 6",
              value: "value6"
            }
          ],
          buttons: [
            {
              text: "Cancel",
              role: "cancel",
              cssClass: "secondary",
              handler: () => {
                console.log("Confirm Cancel");
              }
            },
            {
              text: "Ok",
              handler: () => {
                console.log("Confirm Ok");
              }
            }
          ]
        })
        .then(a => a.present());
    },

    presentAlertCheckbox() {
      return this.$ionic.alertController
        .create({
          cssClass: "my-custom-class",
          header: "Checkbox",
          inputs: [
            {
              type: "checkbox",
              label: "Checkbox 1",
              value: "value1",
              checked: true
            },

            {
              type: "checkbox",
              label: "Checkbox 2",
              value: "value2"
            },

            {
              type: "checkbox",
              label: "Checkbox 3",
              value: "value3"
            },

            {
              type: "checkbox",
              label: "Checkbox 4",
              value: "value4"
            },

            {
              type: "checkbox",
              label: "Checkbox 5",
              value: "value5"
            },

            {
              type: "checkbox",
              label: "Checkbox 6",
              value: "value6"
            }
          ],
          buttons: [
            {
              text: "Cancel",
              role: "cancel",
              cssClass: "secondary",
              handler: () => {
                console.log("Confirm Cancel");
              }
            },
            {
              text: "Ok",
              handler: () => {
                console.log("Confirm Ok");
              }
            }
          ]
        })
        .then(a => a.present());
    }
  }
};
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h1,
h2 {
  font-weight: normal;
}
ul {
  list-style-type: none;
  padding: 0;
}
li {
  display: inline-block;
  margin: 0 10px;
}
a {
  color: #42b983;
}
</style>

4、再次運行項目,點擊按鈕,效果如下

 

返回目錄

 

四、構建Cordova項目

1、安裝cordova包(注意,這里一定要用npm,cnpm里的cordova有點問題)

npm i cordova -g

2、創建cordova項目

cordova create app drea.demo.app

3、進入cordova目錄

cd app

4、添加Browser平台核心套件(cordova platform ls 指令可以查看cordova支持的所有平台)

cordova platform add browser

5、以Browser平台運行,效果如圖

cordova run browser

6、添加Android平台核心套件

cordova platform add android

7、配置Android平台依賴環境(本人提供的下載地址:http://res.drea.cc/open/java/,不過最好去官網下載)

7.1 下載並配置 jdk(我用的1.8版本),環境變量如下(注意,環境變量配置值中的目錄要跟實際目錄保持一致)

配置項:JAVA_HOME
配置值:D:\MyApp\Study\Java\jdk

配置項:Path
配置值:%JAVA_HOME%\bin\

配置項:Path
配置值:%JAVA_HOME%\jre\bin\

 7.2 下載並配置android-sdk(我用的最新版本),環境變量如下

配置項:ANDROID_HOME
配置值:D:\MyApp\Study\Java\android-sdk

配置項:ANDROID_SDK_ROOT
配置值:D:\MyApp\Study\Java\android-sdk

配置項:Path
配置值:%ANDROID_HOME%\tools

配置項:Path
配置值:%ANDROID_HOME%\platform-tools

 7.3 下載並配置apache-ant(我用的最新版本),環境變量如下

配置項:Path
配置值:D:\MyApp\Study\Java\apache-ant\bin

 7.4 下載並配置gradle(我用的最新版本),環境變量如下

配置項:Path
配置值:D:\MyApp\Study\Java\gradle\bin

 8、安裝Android SDK,具體安裝內容如圖所示

9、創建Android模擬器,如圖所示(也可以使用第三方模擬器,推薦:BlueStacks藍疊模擬器)

10、安裝虛擬化增強軟件,假如沒有安裝,啟動模擬器可能會報錯(Android SDK目錄下 extras\intel\Hardware_Accelerated_Execution_Manager)

 

11、查看當前Android依賴環境配置情況,假如一切正常,則效果如圖

cordova requirements android

12、以Android平台運行,效果如圖

假如報異常:Failed to install the following Android SDK packages as some licences have not been accepted platforms;android-28 Android SDK Platform 28,則表示你沒有安裝所需版本的SDK,比如這里表示我們需要安裝API 28 版本的SDK,那么我們就回到第8步繼續安裝

cordova run android

 

13、以Android平台進行打包,假如一切正常,則效果如圖

cordova requirements android

 

返回目錄

 

五、整合Vue、Ionic、Cordova

1、將cordova項目下www目錄中的js文件夾整個拷貝到vue項目下src目錄中

2、參考cordova項目下www目錄中的index.html文件來修改vue項目中的index.html文件,內容如下(這里假如不引用ionic js,會導致發布的android應用顯示異常,原因不明,猜測是ionic對vue項目的適配不是很好,如果有人知道原因,煩勞評論告知)

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="format-detection" content="telephone=no">
    <meta name="msapplication-tap-highlight" content="no">
    <meta name="viewport" content="initial-scale=1, width=device-width, viewport-fit=cover">
    <title>drea.demo.app</title>
  </head>
  <body>
    <div id="app"></div>
    <!-- built files will be auto injected -->
    <script type="text/javascript" src="cordova.js"></script>
    <script type="text/javascript" src="src/js/index.js"></script>
    <script src="https://unpkg.com/@ionic/core/dist/ionic.js"></script>
  </body>
</html>

3、回到vue項目下

cd ..

4、在vue項目中安裝cordova-vue包

cnpm i vue-cordova --save

5、在main.js中新增如下配置

import vueCorvova from 'vue-cordova'

Vue.use(vueCorvova)

6、修改vue項目的編譯輸出位置,如圖

7、編譯vue項目,將會生成編譯文件到cordova項目www目錄下

npm run build

8、重新進入cordova項目

cd app

9、以Browser平台運行,點擊按鈕,效果如圖

cordova run browser

 

10、已Android平台運行,點擊按鈕,效果如圖

cordova run android

 

 

返回目錄


免責聲明!

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



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