前端开发-Weex初试
1 Weex介绍
weex是阿里2016年开源的一套跨移动端(Andriod/IOS/Wap)的前端框架,采用VUE,较React Native入门相对简单
2 Weex安装与初始化
2.1 安装NodeJS和NPM
略过,默认安装了
注意:nodejs的版本须大于4.5.0
2.2 安装weex
- npm install -g week-toolkit,全局安装week工具集合
- 安装完成后命令行输入weex,查看是否有命令帮助内容,如果提示没有weex命令,表示weex没有安装好,检查一下nodejs的版本
2.3 初始化一个项目
- 新建一个项目目录
- 命令行输入 weex init,这时会自动下载和生成相关文件
- 运行npm install,安装相关依赖包
2.4 与IDE集成
我使用的是WebStrom
- 将刚才新建的工程导入webstrom中
- 在setting->plugins中安装weex的插件:weex、weex langugge support,用于创建we文件和支持weex语法(VUE)
- 直接在webstrom的终端中运行weex相关命令
2.5 相关命令
- weex ***.we : 运行调试xxx页面,支持热加载,默认端口是8081和8082 8082是热加载端口
- npm run build : build 在package.json定义的脚本命令,执行webpack
- npm run dev : dev 在package.json定义的脚本命令,执行webpack --watch
- npm run serve : serve package.json定义的脚本命令,启动serve服务
- weex xxx.we --qr: 运行调试xxx页面,并依据地址url生成二维码,主要是在iOS和Android上查看效果,设备须在同一个局域网中
webpack和serve的依赖包需要安装
3 第一个Weex项目
3.1 主页面
3.1.1 main.we
<template>
<scroller>
<text>用户名:</text>
<input id="top" type="text" autofocus="true" placeholder="请输入用户名" value="{{username}}" oninput="usernameoninput" style="margin-top: 200px;margin-left: 200px;font-size:32px;">
</input>
<text>密码:</text>
<input type="password" autofocus="true" placeholder="请输入密码" value="{{password}}" oninput="passwordoninput" style="margin-top: 200px;margin-left: 200px;font-size:32px;">
</input>
<input type="success" value="登录" onclick="login" style="margin-top: 200px;margin-left: 200px;">
</input>
</scroller>
</template>
<style>
</style>
<script>
var common = require('./lib/common.js');
module.exports = {
data: {
root:"dist",
username:"",
password:""
},
ready: function () {
},
methods:{
login:function(e){
var storage = require('@weex-module/storage');
var self = this;
var bundleUrl = this.$getConfig().bundleUrl;
var url = common.getUrl(bundleUrl,'mainindex.lib','dist');
storage.setItem('username', self.username, function(e) {
self.$openURL(url)
});
},
usernameoninput:function(e){
this.username = e.value;
},
passwordoninput:function(e){
this.password = e.value;
}
}
}
</script>
3.1.2 内置组件使用
3.1.2.1 数据存储与读取
var storage = require('@weex-module/storage');//引入存储
storage.setItem('username', self.username, function(e) {//将用户名存进客户端,对应的key是usernam
});
var storage = require('@weex-module/storage');
var self = this;
storage.getItem("username",function(e){//读取数据
self.headinfo = e.data;
});
3.1.2.2 数据请求
var stream = require('@weex-module/stream');
stream.fetch({
method: 'GET',
url: "http://192.168.169.124:3000/testhttpget.do",
type:'json'
}, function(response) {
self.body = response.data.info;
},function(response){
});
其他内置组件使用,请参看API
3.2 自定义组件
3.2.1 新建we文件
<template>
<div class="headclass">
<text>{{headinfo}}</text>
</div>
</template>
<script>
module.exports = {
data:{
headinfo:"welcome to this"
},
ready:function(){
var storage = require('@weex-module/storage');
var self = this;
storage.getItem("username",function(e){
self.headinfo = e.data;
});
}
}
</script>
<style>
.headclass{
margin-top: 200px;
}
</style>
3.2.2 引入
<script>
require('./components/headdiv.we')
module.exports = {
data:{
}
}
</script>
3.2.3 使用
<template>
<div class="bg">
<headdiv></headdiv>
</div>
</template>
3.3 引用JS文件与打包
3.3.1 定义JS
var getUrl = function(bundleUrl,fileName,dir,host){
var nativeBase;
var isAndroidAssets = bundleUrl.indexOf('file://assets/') >= 0;
var isiOSAssets = bundleUrl.indexOf('file:///') >= 0 && bundleUrl.indexOf('WeexDemo.app') > 0;
if (isAndroidAssets) {
nativeBase = 'file://assets/';
}
else if (isiOSAssets) {
nativeBase = bundleUrl.substring(0, bundleUrl.lastIndexOf('/') + 1);
}
else {
host = host||'localhost:8080';
var matches = /\/\/([^\/]+?)\//.exec(bundleUrl);
if (matches && matches.length >= 2) {
host = matches[1];
}
nativeBase = 'http://' + host + '/' + dir + '/';
}
var h5Base = './index.html?page=./' + dir + '/';
// in Native
var base = nativeBase;
if (typeof window === 'object') {
base = h5Base;
}
return base+fileName;
}
3.3.2 引用
var common = require('./lib/common.js');
打包
require('webpack')
require('weex-loader')
var path = require('path')
module.exports = {
entry: {//主we页面
main: path.join(__dirname, 'src', 'main.we?entry=true')
},
output: {
path: 'dist',
filename: '[name].lib'
},
module: {
loaders: [
{
test: /\.we(\?[^?]+)?$/,
loaders: ['weex-loader']
},
{
test: /\.js$/,
loaders: ['weex-loader'] //将js文件打包
}
]
}}
3.4 页面跳转
self.$openURL(url)
须要注意Android和iOS的跳转,要提前定义好相关协议
4 与Android的集成
4.1 创建工程
创建Android 工程
4.2 引入weex
- 下载源码 git clone https://github.com/alibaba/weex
- File->New-Import Module->选择WEEX SDK Module(weex/android/sdk)->Finish
- app 的build.gradle 中添加如下依赖:compile project(':weex_sdk')
4.3 引入相关组件
apply plugin: 'com.android.application'
android {
compileSdkVersion 24
buildToolsVersion "25.0.0"
defaultConfig {
applicationId "demo.android.weex.tomsnail.cn.weexandroiddemo"
minSdkVersion 21
targetSdkVersion 24
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:24.2.1'
compile 'com.android.support:design:24.2.1'
compile 'com.taobao.android:dexposed:0.1.8'
compile 'com.loopj.android:android-async-http:1.4.9@aar'
compile 'com.facebook.fresco:fresco:0.12.0+'
compile 'com.facebook.fresco:animated-gif:0.12.0'
compile 'com.squareup.okhttp:okhttp:2.3.0'
compile 'com.squareup.okhttp:okhttp-ws:2.3.0'
compile 'com.squareup.okio:okio:1.0.1'
compile 'com.alibaba:fastjson:1.1.46.android'
compile 'com.android.support:support-annotations:23.2.1'
compile 'com.jakewharton.scalpel:scalpel:1.1.2'
compile 'com.squareup.picasso:picasso:2.5.2'
//compile 'com.google.android.gms:play-services-appindexing:8.1.0'
compile 'com.taobao.android:weex_inspector:0.0.8.1'
compile project(':weex_sdk')
testCompile 'junit:junit:4.12'
compile 'com.google.android.gms:play-services-appindexing:8.4.0'
}
4.4 创建基础类
- WXApplication
- ImageAdapter
- MainActivity
4.5 配置AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="demo.android.weex.tomsnail.cn.weexandroiddemo">
<!-- To auto-complete the email text field in the login form with the user's emails -->
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_PROFILE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE">
</uses-permission>
<application
android:name=".WXApplication"
android:allowBackup="false"
android:icon="@mipmap/ic_launcher"
android:label="weexandroiddemo"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".Main1Activity">
</activity>
<!-- ATTENTION: This was auto-generated to add Google Play services to your project for
App Indexing. See https://g.co/AppIndexing/AndroidStudio for more information. -->
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
</application>
</manifest>
4.6 加入js
在src下新建assets文件夹,将weex生成的dist下的文件放入以便加载 WXFileUtils.loadAsset(path, context)
4.7 运行
连接设备运行app,建议使用真机,使用模拟机占用电脑资源较多
5 相关问题
5.1 升级
- 依据版本号规划进行升级
- 打包下载,本地解压存储、文件缓冲
5.2 自定义事件
- 定义好相关协议
- SPA化
5.3 消息与推送
- 只做Native功能
5.4 Native功能
- 比如拍照上传、相册等功能还是需要移动端开发人员开发和集成
5.5 持续集成
- 重新定义集成流程,将weex的发布与移动端的发布联合定义
相关代码在整理后近期放在github上
前端开发-Weex初试的更多相关文章
- 前端开发福音!阿里Weex跨平台移动开发工具开源-b
阿里巴巴今天在Qcon大会上宣布跨平台移动开发工具Weex开放内测邀请.Weex能够完美兼顾性能与动态性,让移动开发者通过简捷的前端语法写出Native级别的性能体验,并支持iOS.安卓.YunOS及 ...
- 阿里巴巴开源前端框架--Weex实践
Weex是最近很火很NB的一个技术产品,因为本篇介绍的是怎样使用Weex的最佳实践,所以就不罗里吧嗦的夸它怎么怎么好了,感兴趣的可以访问Weex HomePage,或加入旺旺群:1330170019. ...
- BAT 前端开发面试 —— 吐血总结
更好阅读,请移步这里 聊之前 最近暑期实习招聘已经开始,个人目前参加了腾讯和阿里的内推及百度的实习生招聘,在此总结一下 一是备忘.总结提升,二是希望给大家一些参考 其他面试及基础相关可以参考其他博文: ...
- [转] Web前端开发工程师常用技术网站整理
1.常用工具相关 有道云笔记 http://note.youdao.com/signIn/index.html 36镇-最好用的共享收藏夹 http://www.36zhen.com/ 浏览器同步测试 ...
- Web前端开发工程师常用技术网站整理
1.常用工具相关 有道云笔记 http://note.youdao.com/signIn/index.html 36镇-最好用的共享收藏夹 http://www.36zhen.com/ 浏览器同步测试 ...
- 前端开发个人小结 · Retrospection的博客
序 2018年转眼来到了最后一个月,算下来我进入前端之门也有一年了,虽然下半年由于忙于筹备毕业论文的相关事项,前端这一块有所放下,但是想想还是给自己这一年的学习做一个总结. 现代化软件开发确实是一个复 ...
- 总结:Mac前端开发环境的搭建(配置)
新年新气象,在2016年的第一天,我入手了人生中第一台自己的电脑(大一时好友赠送的电脑在一次无意中烧坏了主板,此后便不断借用别人的或者网站的).macbook air,身上已无分文...接下来半年的房 ...
- 前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型
前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型 前言(题外话): 有人说拖延症是一个绝症,哎呀治不好了.先不说这是一个每个人都多多少少会有的,也不管它究竟对生活有多么大的 ...
- openresty 前端开发入门五之Mysql篇
openresty 前端开发入门五之Mysql篇 这章主要演示怎么通过lua连接mysql,并根据用户输入的name从mysql获取数据,并返回给用户 操作mysql主要用到了lua-resty-my ...
随机推荐
- SAP 打开账期
1.先OB52修改账期: 如下界面开得公司9000下面 7.8月份的账期 2.mmpv 关闭上两个账期 3.mmrv 查看现在账期情况
- js之正则1
在看jquery的源码时,看到对$对象的init入口对参数解析时,正则的迷惑. 疑惑点:z = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/ a = ...
- js点击按钮倒计时setTimeout和setInterval
setTimeout() 用于在指定的毫秒数后调用函数或计算表达式,只执行 code 一次. setInterval() 可按照指定的周期(以毫秒计)来调用函数或计算表达式,不停地调用函数,直到 cl ...
- python工具的安装
下载: python安装包:python-2.7.3.msi pywin32-218.win32-py2.7.exe setuptools安装包:setuptools-0.6c11.win32-py2 ...
- 本地调试webapi
1.新建iis站点,路径关联到代码站点下D:\work\易解科技\程序源码\YQJ\trunk\YQJOpenAPI\YQJOpenAPI 2.vs以管理员身份启动 3.附加到进程 w3wp.exe ...
- 团队作业week3
请每个团队的成员划分各自的角色:PM.Dev.Test,并通过团队博客发布. 请每个团队给出团队贡献分的分配方法,团队贡献分总分数数为:20 * 团队人数.要求每两个人的分数都不相同.请在团队博客写出 ...
- Eclipse的安装和java环境变量的设置
首先准备工作是要下载好Eclipse和java JDK. 必须要注意的是,Eclipse和java JDK必须下载同一位数的版本,即64位同为64位,32位同为32位.否则在安装完成运行Eclipse ...
- ubuntu 14.04 编译内核出现unable to locate package ncurses-devel 问题的解决
http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece7631046893b4c4380146d96864968d4e414c422461614 ...
- php 中文正则
utf8编码中文 preg_match("/^[\x{4e00}-\x{9fa5}]+$/u") 而不是 "/^[\x4e00-\x9fa5]+$/u"
- C3P0连接池连接MySQL出现的问题
1.Clearing pending acquires. While trying to acquire a needed new resource, we failed to succeed mor ...