1. 程式人生 > >cordova 整合 webpack vue

cordova 整合 webpack vue

reat ready 註意 tps 生成 sap dex vue def

cordova 是hybrid開發app的一個框架,通過js橋接原生api實現了js調用原生的一些功能;本打算學習下阿裏的weex;可是一直打包不了,加上之前也用過cordova,打算使用cordova嘗試一下;整合上vue這種開發界面的利器是不是更加爽呢?

1.環境搭建

> cordova環境搭建

由於我們使用cordova作為app開發框架,我們得先搭建cordova;cordova的安裝可以使用npm yarn等安裝;全局安裝: npm install -g cordova

由於需要打包app自然需要android sdk 或者 ios sdk (土豪們的mac下xcode是要安裝的)

可以參考官網: http://cordova.apache.org/#getstarted

> vue環境搭建

vue的環境搭建沒什麽難度吧,直接按照官網做就行

vue-cli的安裝: npm install -g vue-cli

2.構建項目

創建項目由於是將cordova和vue整合,而vue使用webpack調試,發布;因此必須按照先 cordova 後 vue的方式進行;不過你可以嘗試下先創建vue項目文件再創建cordova項目,看會報什麽錯。

> 搭建cordova項目

按照官網示例cordova create appName com.app.appName appName方式創建一個項目,生成如下結構項目文件:

技術分享圖片

添加android平臺sdk:cordova platform add android

這是一個標準的cordova項目目錄,接下來我們將在該目錄下通過vue-cli添加vue項目文件到該目錄

> 搭建vue項目

同樣安裝vue官網示例創建vue項目: vue init webpack appName ; 註意此時會提示已存在該文件夾,是否覆蓋,如下圖:

技術分享圖片

我們選擇Y繼續

好了,我們搭建好了vue的項目,進行appName項目目錄,安裝包 npm install

測試vue:npm run dev 正常打開http://localhost:8080/即為正常

此時項目結構如下:

技術分享圖片

3. 整合vue到cordova

如果熟悉cordova的人知道,cordova的html頁面目錄是存放在上圖的www目錄下的,而現在我們的vue源碼目錄再src下,打包後存放在dist目錄下,cordova的入口文件www/index.html主要是引入了cordova.js作為橋接,如下代碼:

<head>
        <meta http-equiv="Content-Security-Policy" content="default-src ‘self‘ data: gap: https://ssl.gstatic.com ‘unsafe-eval‘; style-src ‘self‘ ‘unsafe-inline‘; media-src *">
        <meta name="format-detection" content="telephone=no">
        <meta name="msapplication-tap-highlight" content="no">
        <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
        <link rel="stylesheet" type="text/css" href="css/index.css">
        <title>Hello World</title>
    </head>
    <body>
        <div class="app">
            <h1>Apache Cordova</h1>
            <div id="deviceready" class="blink">
                <p class="event listening">Connecting to Device</p>
                <p class="event received">Device is Ready</p>
            </div>
        </div>
        <script type="text/javascript" src="cordova.js"></script>
        <script type="text/javascript" src="js/index.js"></script>
    </body>

對比上面的代碼和vue打包後的index.html文件代碼,我們可以發現,cordova引入了Content-Security-Policy來設置比較寬松的資源加載策略和防止xss攻擊;我們將其加入到根目錄vue的index.html的頭部,同時我們將cordova.js也加入到頁面底部,最終我們根目錄下的頁面代碼如下:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
    <meta http-equiv="Content-Security-Policy" content="default-src ‘self‘ data: gap: https://ssl.gstatic.com ‘unsafe-eval‘; style-src ‘self‘ ‘unsafe-inline‘; media-src *">
    <meta name="format-detection" content="telephone=no">
    <meta name="msapplication-tap-highlight" content="no">
    <title>vue-cordova-app</title>
  </head>
  <body>
    <div id="app"></div>
    <script type="text/javascript" src="cordova.js"></script>
    <!-- built files will be auto injected -->
  </body>
</html>

此時,我們只要能將vue打包的目標路徑定向到www目錄即可完成整合。

接下來就是修改vue的webpack打包,(webpack高手請忽略)

  • 修改 config/index.js 修改 ../dist 為 ../www
  • 修改 assetsSubDirectory 為 ‘./‘
  • 修改 assetsPublicPath 為 ‘‘

上述修改就將webpack打包目標路徑改為www,將資源路徑由dist/static/js改為了www/js目錄、dist/static/css 改為了 www/css目錄。

執行命令npm run build 打包試試。

最後再cordova run android試試

好了,總算敲完了...

cordova 整合 webpack vue