融合Cordova和Vuejs的开发环境
最近开始在开发 Cordova + Webpack + Vuejs
架构的 App
,开发 Demo
的时候,最麻烦的就是测试了。
由于我是先使用 cordova
的工具创建 cordova
项目,然后用 vue-cli
再在 cordova
中创建 vuejs
项目。
这样在开发的时候,需要先使用 npm run dev
调试 vuejs
,然后开发差不多了,需要调用 cordova
插件的时候,再执行 cordova prepare browser
和 cordova run browser
调试 cordova
插件,每次改完代码还要再执行 npm run build && cordova prepare browser
。
这样就很烦啊!
为了在正式开发项目前解决这个问题,我研究了萤火钱包的实现和 webpack
的文档。
萤火钱包的实现方式是自己用 Node
写了一个 Web
服务,代码在这里:https://github.com/StellarCN/firefly/blob/master/build/dev-server.js 。
由于 Webpack
可以使用 require
的方式和 webpack-dev-server
两种方式对代码进行打包,萤火钱包就是在自己写的 Server
中,先引用 webpack
打包代码(24行–41行),然后用 express
给 cordova
的 js bridge
提供解析(66行–88行),最后在 package.json
https://github.com/StellarCN/firefly/blob/master/package.json#L18 中加入一行代码,完成 cordova prepare
后再启动自己写的 Node
服务器。
按照萤火的思路尝试了大半天,一直都搞不定 webpack
的配置,一直给我报错,如下
1 | WebpackOptionsValidationError: Invalid configuration object. Webpack has been initialised using a configuration object that does not match the API schema. |
最后只得再换个思路,用 webpack-dev-server
再试试。
由于 vuejs
默认就是用 webpack-dev-server
作为测试环境,所以需要改动的文件还是比较少,只需要修改 build/webpack.dev.conf.js
中的配置和 package.json
就好了。
在 build/webpack.dev.conf.js
中的 devServer
配置项里加上下面的代码:
1 | before(app){ |
另外再在该文件头部加入 express
包的引用。
通过 devServer.before
加入 cordova
的 js bridge
,这样就可以用 webpack-dev-server
来解析 js bridge
了。
最后在 package.json
中修改下原有的 dev
命令如下:
1 | "dev": "cordova prepare browser && cross-env PORT=3000 webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", |
这样以后只需要执行 npm run dev
就可以了,只有当用 cordova
安装了新插件的时候,才需要重启下 npm run dev
。
再插入个小修改。我在 src/main.js
中加入了如下的代码,可以让 cordova js bridge
动态插入进 APP
:
1 | // add cordova.js only if serving the app through file:// |
OVER!!