weex入门篇
weex入门篇
Weex 致力于使开发者能基于当代先进的 Web 开发技术,使用同一套代码来构建 Android、iOS 和 Web 应用。
weex SDK 集成了vueJS,Rax,不需要额外引入。
一)环境的搭建
1)搭建android环境:首先安装搭建好AndroidStudio,参照react-native 官网环境搭建(比较清楚),适用于weex。
2)安装weex环境
$ npm install -g weex-toolkit
$ weex -v //查看当前weex版本
3)初始化一个项目
$ weex create 项目名字
4)我们先通过 npm install 安装项目依赖。之后运行根目录下的 npm run dev & npm run serve开启 watch 模式和静态服务器。
然后我们打开浏览器,进入 http://localhost:8080/index.html 即可看到 weex h5 页面。
二)真机调试
首先安装一个adb,下载地址 http://adbshell.com/downloads , 正确安装adb,https://jingyan.baidu.com/article/22fe7cedf67e353002617f25.html ,
通过usb链接手机,电脑,执行命令 weex run android
三)开发注意
1)关于全局对象:
在开发h5项目的时候会经常性的使用到document,history,location,navigator,window,screen等一些全局变量,但是在开发三端兼容的项目的时候不能使用。
window、screen -----> WXEnvironment或者weex.config.env.platform
document -----> weex.requireModule("dom")
2)关于导航:
weex集成了vueRouter,但是使用vueRouter只是单页面,在浏览器中的vue应用,通过浏览器的“前进”,”后退“仍然会处于同一个页签,但是在原生应用中的”前进“,”后退“则会跳出这个页签到其他页面。因此建议使用weex的提供的navigator进行页面跳转。
3)关于css样式:
weex适配默认是iphone6 (750)的物理像素宽的等比缩放方式,无视屏幕分辨率和尺寸,采用flex流式布局。
weex 不支持样式嵌套多层查询,例如 .outer-wrapper .inner-item 这种多类嵌套查询。
不支持样式继承,例如color,fontSize。
image元素要给出width,height不然无法显示图片。
不识别样式属性的简写 margin: 0 0 10px 10px,要写成margin-top:0;margin-right:0margin-bottom:10px; margin-left:10px; color: #888 -> #888888; blue -> #0000FF
4)静态资源图片的加载web,android,ios三个平台的加载方式有不同,要做代码处理,
android需要将图片资源放置在 \platforms\android\app\src\main\res\ drawable-**文件中,
ios: platforms\ios\images
下面给出一段拷贝图片的具体实现:
copyFile.js
// @fun 针对于weex框架image静态资源加载web,ios,android的加载方式不同做的特殊处理
'use strict'
const mkdirp = require('mkdirp')
const filecopy = require('filecopy')
// google play上上架
/**
*google play会根据不同的手机density来打不同的apk包(举个栗子,如果是hdpi的机器,下载下来的就只有hdpi的资源)
*如果是在国内的市场话。建议只放一套(h或者xhpdi),因为国内市场是没有上面那种机制的,放多套资源会导致安装包变得很大。
*此外: Android在没有找到相应dpi的图片时,会用其他density的图片进行缩放处理。
*/ // 获取命令行参数
let paltformDefine = process.argv.slice(2)[0]
let filePath = 'src/assets/icons/*.png'
let androidIconPlatform = ['drawable-hdpi', 'drawable-mdpi', 'drawable-xhdpi', 'drawable-xxhdpi'] if (paltformDefine === 'android') {
let androidPath = 'platforms/android/app/src/main/res/'
mkdirFile(androidPath).then(res => {
androidIconPlatform.forEach((item, index) => {
copyIcon(`${androidPath}` + `${item}`)
})
}).catch(err => {
return err
})
} else if (paltformDefine === 'ios') {
let iosPath = 'platforms/ios/images/'
mkdirFile(iosPath).then(res => {
copyIcon(iosPath)
}).catch(err => {
return err
})
} function copyIcon (fileDestPath) {
filecopy(filePath, fileDestPath, {
mkdirp: true
}).then(() => {
return ''
}).catch(() => {
console.log('file copy fail')
})
} function mkdirFile (fileName) {
return new Promise((resolve, reject) => {
mkdirp(fileName, function (err) {
if (err) {
return reject(err)
}
return resolve(true)
})
})
}
getImageFile:
module.exports = {
getImageFile: function (imageName) {
if (!weex || !weex.config || !weex.config.env) {
return
}
let _dotPoint = (imageName + '').lastIndexOf('.')
let _pureFileName = (imageName + '').slice(0, _dotPoint)
// let _imageFormat = (imageName + '').slice(_dotPoint)
// 平台信息
let _platform = weex.config.env.platform
if (_platform === 'android') {
let _filePrefix = 'local:///'
return _filePrefix + _pureFileName
}
if (_platform === 'iOS') {
let _filePrefix = 'local://'
return _filePrefix + _pureFileName
}
if (_platform === 'Web') {
let _filePrefix = '../../src/assets/icons/'
return _filePrefix + imageName
}
}
}
npm command
"copyFile:android": "node src/utils/copyFile.js android",
"copyFile:ios": "node src/utils/copyFile.js ios",
"copy": "npm run copyFile:android && npm run copyFile:ios"
执行 npm run copy即可,完成图片资源的复制
具体在页面上使用
<image class="player-icon" :src="_getImageFile('player.png')"/>
// 获取image 路径
_getImageFile (ImageName) {
return commonFun.getImageFile(ImageName)
},
weex入门篇的更多相关文章
- Weex入门篇——Mac 安装Weex
相关文档:http://blog.csdn.net/jasonblog/article/details/51863173 前言 相比较于React Native的“Learn once, write ...
- Membership三步曲之入门篇 - Membership基础示例
Membership 三步曲之入门篇 - Membership基础示例 Membership三步曲之入门篇 - Membership基础示例 Membership三步曲之进阶篇 - 深入剖析Pro ...
- spring boot(一):入门篇
构建微服务:Spring boot 入门篇 什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框 ...
- 1. web前端开发分享-css,js入门篇
关注前端这么多年,没有大的成就,就入门期间积累了不少技巧与心得,跟大家分享一下,不一定都适合每个人,毕竟人与人的教育背景与成长环境心理活动都有差别,但就别人的心得再结合自己的特点,然后探索适合自己的学 ...
- 一个App完成入门篇(七)- 完成发现页面
第七章是入门篇的倒数第二篇文章了,明天整个APP将进入收官. 本节教程主要要教会大家使用二维码扫描和用do_WebView组件加在html页面. 导入项目 do_WebView组件 扫描功能 自定义事 ...
- [原创]Linq to xml增删改查Linq 入门篇:分分钟带你遨游Linq to xml的世界
本文原始作者博客 http://www.cnblogs.com/toutou Linq 入门篇(一):分分钟带你遨游linq to xml的世界 本文原创来自博客园 请叫我头头哥的博客, 请尊重版权, ...
- 转:OSGi 入门篇:模块层
OSGi 入门篇:模块层 1 什么是模块化 模块层是OSGi框架中最基础的一部分,其中Java的模块化特性在这一层得到了很好的实现.但是这种实现与Java本身现有的一些模块化特性又有明显的不同. 本文 ...
- 转:OSGi 入门篇:生命周期层
OSGi 入门篇:生命周期层 前言 生命周期层在OSGi框架中属于模块层上面的一层,它的运作是建立在模块层的功能之上的.生命周期层一个主要的功能就是让你能够从外部管理应用或者建立能够自我管理的应用(或 ...
- 【three.js详解之一】入门篇
[three.js详解之一]入门篇 开场白 webGL可以让我们在canvas上实现3D效果.而three.js是一款webGL框架,由于其易用性被广泛应用.如果你要学习webGL,抛弃那些复杂的 ...
随机推荐
- 一个简单清晰的Redis操作类-php
<?php /** * redis处理的二次封装 * */ class Redis{ private $_redis; private $_config; public function __c ...
- Linux内核分析04
扒开系统调用的三层皮(上) 一,用户态.内核态和中断 用户态.内核态和中断的处理过程 用户态和内核态的区分 内核态:代码可以执行特权指令,访问任意的物理地址,CPU的这种执行级别就对应着~ 相对的用户 ...
- phpstorm2016.1 添加对Drupal的编程支持
一.前言 phpstorm作为目前对drupal支持最好的开发工具之一,是drupal模块开发的首选工具.今天我就来谈谈最新的phpstorm如何添加对drupal模块的支持. 相关环境:操作系统ub ...
- HttpClient 4.5.3 get和post请求
HttpCilent 4.5.3 域名购买.com 后缀好域名 https://mi.aliyun.com/shop/38040 GET请求 CloseableHttpClient httpCilen ...
- codeforces 356 div2 C.Bear and Prime 100 数学
C. Bear and Prime 100 time limit per test 1 second memory limit per test 256 megabytes input standar ...
- java中如何使用Junit测试
java中如何使用Junit测试 一.总结 一句话总结:a.单元测试的测试代码在test文件夹下,和源码不在同一个文件夹下 b.测试的类方法都以test开头,后面接要测试的类或者方法的名字 1.JUn ...
- 递归--练习1--noi3089爬楼梯
递归--练习1--noi3089爬楼梯 一.心得 根据输入,是要写连续输入多个值的程序 二.题目 3089:爬楼梯 总时间限制: 1000ms 内存限制: 65536kB 描述 树老师爬楼梯,他可 ...
- JSP 语法
JSP 语法 本小节将会简单地介绍一下JSP开发中的基础语法. 脚本程序 脚本程序可以包含任意量的Java语句.变量.方法或表达式,只要它们在脚本语言中是有效的. 脚本程序的语法格式: <% 代 ...
- hdu3549网络流之最大流
Ford-Fulkerson方法:dfs实现 dfs 140ms #include<map> #include<set> #include<cmath> #inc ...
- Android下移植tcpflow
tcpflow是linux平台下的开源抓包工具,它能监听网络url,获取http请求的各种数据.tcpflow可以说是tcpdump的简约版.要想将tcpflow移植到Android平台中,就需要通过 ...