iOS开发之纯Weex+Vuejs开发原生App整体结构和调试步骤分析(二)

匿名 (未验证) 提交于 2019-12-03 00:25:02

前言

上一篇文章是根据Weex官方的介绍,启动了Weex的Hello World的介绍以及一些插件的安装

环境部署和Debug

之前花了2周时间看了下Vue的语法和用法以及一些实战介绍,毕竟是iOS开发,还是有必要把新学的东西写下来,而且会写的非常详细,能保证从我git仓库弄下来的基础结构能跑起来并且能热更新调试


这个是整体的结构,基本上搭完这个结构,你就可以开发一个简单App来玩了。


OK下面就开始介绍如何来配置启动



步骤一(Git clone或者Download到本地)

Git仓库地址

这里会涉及到一些Weex安装的插件和一些简单的webpack知识,也就是看得懂就好了,不明白的可以看顶部第一个文章里面去安装创建一个Hello world结构就基本明白了

随你放到哪里,然后打开终端,cd到文件根目录,我这里是在桌面建了个文件夹解压放进去

mintoudeMacBook-Pro:~ mintou$ cd /Users/mintou/Desktop/测试Git部署  mintoudeMacBook-Pro:测试Git部署 mintou$ ls -a .			.DS_Store ..			WeexRouterDemo-master mintoudeMacBook-Pro:测试Git部署 mintou$ pwd /Users/mintou/Desktop/测试Git部署 mintoudeMacBook-Pro:测试Git部署 mintou$ cd WeexRouterDemo-master/ mintoudeMacBook-Pro:WeexRouterDemo-master mintou$ ls -a .			.gitignore		newDemo ..			README.md .DS_Store		animation终极.gif mintoudeMacBook-Pro:WeexRouterDemo-master mintou$ cd newDemo/

然后直接 npm install 把包里面的依赖安装好,目录里面会多一个node_modules,安装的依赖来自于package.json里面的依赖,依赖很多,等几分钟安装好即可

这个时候 执行 npm start 会启动一个本地服务,你就能看到Web上展示出来的东西了,但是这个不是我们想要的,我不喜欢这种调试模式,而且很多连官方的Demo都会报错,所以我还是倾向于App来调试,Web只是辅助的,看看就好了,继续下一步

步骤二(打包成iOS)

weex platform add ios

执行这个,安装iOS平台,但是有时候会出现

10:27:07 : Current working directory is not a weex project.

如果出现这个,直接执行

weex run ios
目录下面会出现打包好的jsbundle文件,然后你在执行
weex platform add ios
weex run ios

如果一切正常,就会让你选择模拟器,选择下iPhoneX运行

这个Xcode目录结构是weex帮我们创建的,因此,静态资源文件和调试窗口都还没有配置,你看到的首页没有启动图片,只是白白的一个,但是基本结构还是有了。

步骤三(配置本地资源文件和WxDevTool调试工具)

首先资源都在目录下面的static文件夹下面,里面有图片和字体

放在上面那个resource目录下面


const webIconFontPath = 'static/font/iconfont.ttf'; const androidIconFontPath = 'local:///font/iconfont.ttf'; const iosIconFontPath = 'local:///font/iconfont.ttf';  export function getIonFontPath(abs) {     if (WXEnvironment.platform === 'Web') {         return abs + webIconFontPath     } else if (WXEnvironment.platform.toLowerCase() === 'android') {         return androidIconFontPath     } else {         return iosIconFontPath     } }  export function addIconFontSupport(dom, abs) {     if(dom) {         dom.addRule('fontFace', {             'fontFamily': "wxcIconFont",             'src': `url('${getIonFontPath(abs)}')`         });     } }   export function getImagePath(name, type = '', abs = '../../') {     if (WXEnvironment.platform === 'Web') {         return `${abs}static/img/${name}${type}`     } else if (WXEnvironment.platform === 'android') {         return `local:///${name}`;     } else {         return `local:///${name}${type}`;     } }

js直接用下面的路径操作就可以读取到本地的文件


上面其实已经启动App服务了,只是App的调试如何在Web上面如何进行,这里就需要用到weex-toolkit了

weex官方介绍

这里没有像Weex二维码扫描一样配置,而是直接根据自己生成的debug地址进行调试,操作步骤如下

1.cd到platform->iOS目录下面,找到Podfile文件,里面按这个配置,直接copy过去,然后执行pod install

source 'git@github.com/CocoaPods/Specs.git' platform :ios, '8.0' #inhibit_all_warnings!  def common 	pod 'WeexSDK'     pod 'WeexPluginLoader'     pod 'SDWebImage', '3.7.5'     pod 'SocketRocket', '0.4.2'     pod  'WXDevtool', '0.15.3', :configurations => ['Debug'] end  target 'WeexDemo' do     common end  target 'WeexUITestDemo' do     common end



安装之后,打开Xcode文件,然后在AppDelegate里面引入头文件

#import <TBWXDevTool/WXDevTool.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {     self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];     self.window.backgroundColor = [UIColor whiteColor];          [WXDevTool setDebug:YES];     [WXDevTool launchDevToolDebugWithUrl:@"ws://192.168.1.47:8089/debugProxy/native/ee10e3b6-df8c-4fc9-8c84-628bbb2064e6"];          [WeexSDKManager setup];          [self.window makeKeyAndVisible];          // Override point for customization after application launch.     [self startSplashScreen];          return YES; }

最后在App这个启动的方法里面加入WXDevTool的配置 注意别复制我的,launchDevToolDebugWithUrl 这个方法的后面参数是自己配置的,下面介绍

Debug Url 是哪里来的?

打开新的终端,cd到目录下面,然后执行weex debug 会出现一个页面,我的做法是点击页面的二维码,然后会进入一个新的调试页面。首先看终端,找到对应的host


然后native后面的路径就是weex debug打开的网页里面的参数


把终端的host路径和这个Id拼起来,才是上面WXDevTool的Url参数,如果你错了一个,例如端口不对或者id没有配对,你启动的App是看不到任何东西的

OK,这个时候基本都配置完了,你通过Weex run ios启动App,能同时看到Web和App的更新,你如果用代码编辑器保存js文件,Web和App是会实时更新对应的更改的,如果有错误,Web也能看到如下类似的报错



步骤四(目录结构和多路由配置)

├―― README.md   			// 项目说明 ├―― configs					// 打包编译配置文件    ├―― config.js    ├―― helper.js    ├―― logo.png    ├―― plugin.js    ├―― utils.js				// 构建工具相关    ├―― vue-loader.conf.js    ├―― webpack.common.conf.js   // webpack公共环境数据    ├―― webpack.dev.conf.js		 // webpack开发环境    ├―― webpack.prod.conf.js     // webpack生产环境    └―― webpack.release.conf.js ├―― dist					// 编译打包出来的文件目录,打包出几个js文件安居上面的webpack设置    ├―― FourthPage.js    ├―― index.js    ├―― index.web.js    └―― vendor.web.js ├―― node_modules			// npn install 安装的依赖,根据package.json的内容安装插件 ├―― package.json			// 依赖json以及一些命令的介绍 ├―― platforms				// 编译出来的平台    ├―― ios    └―― platforms.json ├―― plugins    └―― plugins.json ├―― src						// 源码工作目录    ├―― components			// vue组件目录         ├―― FirstPage.vue   // tabbar页面1       ├―― FourthPage.vue  // 二级Navigator跳转页面       ├―― LoginPage.vue   // 登陆页面       ├―― MainTabPage.vue // 主页面tabbar       ├―― SecondPage.vue  // tabbar页面2       ├―― ThirdPage.vue   // tabbar页面3       └―― WelcomePage.vue // 进入的引导页面    ├―― config				// vue配置文件目录    ├―― entry				// webpack打包成多个js目录    ├―― entry.js			// 程序入口js文件 加载各种组件    ├―― index.vue			// 入口页面文件    ├―― mixins				// 混入目录,类似iOS的Category全局注入方法    └―― router.js			// 路由跳转相关文件 ├―― static					// 静态资源 web目录  iOS需要自行拖进去bundle目录下面    ├―― font    └―― img ├―― web	    ├―― assets    ├―― index.html			// 唯一入口页面    └―― preview.html └―― webpack.config.js

根据上面的Demo,我们用到了router看下结构

/* global Vue */ import Router from 'vue-router' import WelcomePage from '@/components/WelcomePage' import LoginPage from '@/components/LoginPage' import MainTabPage from '@/components/MainTabPage'  Vue.use(Router)  module.exports = new Router({     routes: [{             path: '/',             name: 'WelcomePage',             component: WelcomePage         },         {             path: '/login',             name: 'LoginPage',             component: LoginPage         },         {             path: '/main',             name: 'MainTabPage',             component: MainTabPage         },     ] })

分别是启动引导页面,登陆页面和主页面Tabbar(页面1 页面2 页面3),还有个页面不是router里面的就是页面4

正常情况下,默认打包,router只会在dist目录下打包出一个js文件,也就是index.js,所有的跳转都是Router的切换,这样如果你用Weex做一个纯粹的RouterApp,那体验就和H5一模一样了,点进去几层,就要像网页一样一层层返回。这里就涉及到了Weex给出的Navigator模块,如果要想原生一样跳转,就需要单独打包生成对应的js文件,也就是我们上面看到的dist文件夹下面多出来一个FourthPage.js文件,先看下如何进行Navigator跳转。

/*         this.jumpWithParams("RepositoryDetailPage", {                             userName: 'DeftMKJ',                             reposName:  'TaoBaoShoppingCart',                                           web              index.js:37154 http://192.168.1.47:8080/index.js  weex.config.bundleUrl;             index.js:37167 web             index.js:37175 http://192.168.1.47:8080/             index.js:37191 111http://192.168.1.47:8080/             index.js:37192 222             index.js:37193 333http://192.168.1.47:8080/SearchPage.js             http://192.168.1.47:8080/RepositoryDetailPage.js?userName=DeftMKJ&reposName=MKJWechat&title=MKJWechat           */         jumpWithParams(to, params) {             if(WXEnvironment.platform === 'Web') {                 if (this.$router) {                     this.$router.push({name: to, params: params})                 }             } else {                 let path = this.getBaseUrl();                 let q = this.createQuery(params)                 this.getNavigator().push({                     url: path + to + '.js' + q,                     animated: "true"                 }, event => {                 })             }         },

WeexSDK那里应该会默认生成一个页面进行js的管理,单纯嵌入SDK的操作下一篇再记录一下,这里先将纯Weex如何搭建。

那么如何打包出多个js页面?

首先你可以在src目录下面弄一个目录,名字随便,这里是entry,然后你把原本entry.js下的代码复制过来,然后替换成需要打包js的vue组件名称,详情可以看entry目录下的文件

最后在webpack打包目录下新增需要打包的js文件


设置完之后,执行 weex run ios就会打包出多个js文件供我们跳转用。


基本上按上面的做完,就可以愉快的写代码了,按Weex官方的介绍,写几个Vue模板代码,也就是写Controller,然后怼到导航控制器里面去就搞定了。



看了两周多一点的Weex,基本把Vue的知识和JS的知识都过了一遍,写个简单的应该问题不大,这里主要参考的是下面祝各位大神写的Demo 传送门,这位大哥写的其实是用起来的时候需要注意的以及遇到的坑,Demo也非常详细,但没有详细分析一些如何配置入门以及调试,毕竟万事开头难,配置好了,写UI模板代码应该就清晰很多,不然自己按Weex官网写,如果不去看下结构和配置,都不知道为什么那么写。网上很多文章都是站在很高的高度去谈,反正看完完全不知道怎么着手写,而且Bug一大堆,跟着Demo撸了一遍,然后整理了以下我自己的思路,就把这个WeexDemo的基本结构给弄出来了

结构Demo传送门

完整Demo传送门




标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!