天天看點

建立weex項目總結

1.建立項目

weex create

指令建立一個weex項目:

weex create 應用名稱
           

會提示是否安裝依賴,選擇“是”即可。

如果未選擇,後續執行

npm install

安裝也可以。

建立完成後結構如下:

WeexProject    
├── README.md         //項目便簽
├── android.config.json   //Android 工程配置
├── configs             //weex 配置         
├── ios.config.json       //ios 工程配置
├── package-lock.json    
├── package.json        //項目 npm 包管理
├── platforms           //平台模版目錄 
│   ├── ios             //ios 原生平台目錄
│   └── android         //android 原生平台目錄
├── plugins             //插件下載下傳目錄 
│   └── README.md 
├── src                //業務源碼目錄
│   └── index.we       
├── tools              //工具目錄
│   └── webpack.config.plugin.js 
├── web              //web 平台目錄
│   ├── index.html 
└── webpack.config.js    // webpack 子產品打包配置目錄
           

2.運作項目

執行

npm start

(實際上是執行

npm run serve

開啟靜态伺服器),這是工具會啟動一個本地的 web 服務,監聽

8081

端口,并自動打開浏覽器顯示預覽頁面。 源代碼在

src/

目錄中,可以像一個普通的 Vue.js 項目一樣來開發,修改完成後自動就可以在浏覽器預覽。

weex中常用的

npm

指令。這些

npm xxx

的指令,其實都是在package.json裡設定的。可以看到如下代碼:

"scripts": {
    "start": "npm run serve",
    "build": "webpack --env.NODE_ENV=common",  // 打包
    "build:prod": "webpack --env.NODE_ENV=production",
    "build:prod:web": "webpack --env.NODE_ENV=release",
    "build:plugin": "webpack --env.NODE_ENV=plugin",
    "clean:web": "rimraf ./release/web",
    "clean:ios": "rimraf ./release/ios",
    "clean:android": "rimraf ./release/android",
    "dev": "webpack --env.NODE_ENV=common --progress --watch",
    "unit": "karma start test/unit/karma.conf.js --single-run",
    "test": "npm run unit",
    "lint": "eslint --ext .js,.vue src  test/unit --fix",
    "serve": "webpack-dev-server --env.NODE_ENV=development --progress",
    "ios": "weex run ios",
    "web": "npm run serve",
    "android": "weex run android",   // 打包+建構+安裝執行
    "pack:ios": "npm run clean:ios && weex build ios", // 打包+建構
    "pack:android": "npm run clean:android && weex build android",
    "pack:web": "npm run clean:web && npm run build:prod:web"
  }
           

在項目的根目錄下使用指令

npm run dev

開啟 watch 模式,開啟後,每次修改src下的檔案會自動編譯。生成dist目錄下的index.js檔案和index.web.js檔案。

npm run build

裡的指令執行的就是webpack指令,執行打包過程。執行打包之後,所有的工程檔案被單獨打成一個獨立的JSBundle。

下面是由.vue檔案打包出來的包格式(簡寫),使用vue2.0文法編寫:

//{"framework":"vue"}
/******/(function(modules){
    
/******/})
           

3.添加移動端支援

預設情況下

weex create

指令并不初始化 iOS 和 Android 項目,可以通過執行

weex platform add

來添加特定平台的項目。

weex platform add ios
weex platform add android
           

拿android為例:

Android環境依賴Android studio 和 Java JDK 1.8 (Windows需要設定Java的環境路徑)

  • Android SDK Platform 26 (通過Android studio安裝:tools-SDK Manager-選擇安裝)
  • Android SDK Build-Tools 26 (通過Android studio安裝)
  • Android virtual device (通過Android studio安裝:tools-AVD Manager-Creat new virtual Device-然後就進入選擇裝置和下載下傳安裝過程過程,選擇API level26,與Platform一緻)

環境配置好之後執行上述指令安裝,安裝好後可以去項目根目錄的

platforms

下看到

android

檔案夾,說明應用支援添加成功。

之後可以在Android Studio裡運作weex。

在Android Studio的啟動界面,選擇Open an exsting Android Studio Project。然後選擇剛才用

weex create xxx

指令建立的項目之下的

platforms/android

目錄打開即可。

運作可能會報錯。

如果是“Failed to find Build Tools revision 26.0”的錯誤,隻需要按它的提示輕按兩下安裝即可。

如果是“Error:Cause: unable to find valid certification path to requested target”的錯誤,在file->Project sructure->denpendencies下,把裡面的依賴一個個點進去更新一下,再重新sync。因為我用的是Android Studio 3.5以上的版本,weex預設是2.2.2的Gradle版本,是以Gradle版本也需要更新一下,更新成3.5.3。

如果是"Error:(30, 0) Could not set unknown property ‘outputFileName’ for object",這個時候需要在Android Studio中把app目錄下的build.gradle檔案中的:

variant.outputs.each { output ->
    def outputFile = output.outputFile
    if (outputFile != null && outputFile.name.equals('app-debug.apk')) {
        def fileName = outputFile.name.replace("app-debug.apk", "weex-app.apk")
        output.outputFile = new File(outputFile.parent, fileName)
    }
}
           

修改成:

variant.outputs.all { output ->
    def outputFile = output.outputFile
    if (outputFile != null && outputFile.name.equals('app-debug.apk')) {
        def fileName = outputFile.name.replace("app-debug.apk", "weex-app.apk")
        outputFileName = fileName
    }
}
           

之後在Android Studio的app目錄下的build.gradle檔案中,在defaultConfig下加入:

javaCompileOptions { 
    annotationProcessorOptions { 
        includeCompileClasspath = true
    } 
}
           

這兩個問題都是與weex本身使用的是低版本的gradle,而在環境配置的過程中更新了gradle版本有相關性。

這時候如果運作成功基本上環境是沒什麼問題了。

4.安裝到移動端

Android Studio配置好之後,運作項目即可将其安裝到移動端。

如果要更新項目,把執行打包指令生成的 js 檔案(weex項目裡的dist/index.js)拷貝到 Android 項目的 assets/dist 資源檔案(app/assets/dist/index.js)中,然後項目會加載 js 檔案進行更新(其實就是使用 Weex SDK 的 WXSDKInstance 類加載)。

當然用以下指令直接在模拟器或真實裝置上啟動應用:

weex run ios
weex run android
weex run web
           

同樣以android為例,這一句指令執行了打包+建構+安裝執行三個過程。

在運作啟動指令前,需要確定 Android所需要的原生運作環境配置正确,并且需要先啟動模拟器(AVD)或連接配接上移動裝置再運作啟動指令。

啟動模拟器就是在Android Studio通過運作(Run)按鈕先把安卓模拟器(AVD)打開,然後再執行

npm run android

連接配接真機就是直接把安卓手機連接配接上,開啟USB調試。輸入:

adb devices
           

如果發現有裝置,則證明連接配接成功。然後再執行

npm run android

,選擇自己的裝置即可。

此時打開 Weex 項目,并嘗試修改 src 目錄下的 index.vue 檔案,可以發現,修改的内容會立即生效。其實就是通過index.js檔案傳給用戶端,再由用戶端解析實作的。

總結一下

Weex将寫好的Vue程式打包成單個JSBundle檔案

釋出到發包伺服器上,通過熱更新 push 到使用者的用戶端,交由【WeexSDK】執行解析

SDK中的【JS Framework】執行Bundle 腳本生成Virtual DOM

Virtual DOM經由各端執行環境【Weex Runtime】解析翻譯成執行指令

【Native RenderEngine】接收到指令後執行渲染操作,作出渲染出完整的界面

建立weex項目總結
vue