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

"scripts": {
 "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)
},
参考: https://www.sunzhongwei.com/weex-android-ios-loaded-local-pictures

weex入门篇的更多相关文章

  1. Weex入门篇——Mac 安装Weex

    相关文档:http://blog.csdn.net/jasonblog/article/details/51863173 前言 相比较于React Native的“Learn once, write ...

  2. Membership三步曲之入门篇 - Membership基础示例

    Membership 三步曲之入门篇 - Membership基础示例 Membership三步曲之入门篇 -  Membership基础示例 Membership三步曲之进阶篇 -  深入剖析Pro ...

  3. spring boot(一):入门篇

    构建微服务:Spring boot 入门篇 什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框 ...

  4. 1. web前端开发分享-css,js入门篇

    关注前端这么多年,没有大的成就,就入门期间积累了不少技巧与心得,跟大家分享一下,不一定都适合每个人,毕竟人与人的教育背景与成长环境心理活动都有差别,但就别人的心得再结合自己的特点,然后探索适合自己的学 ...

  5. 一个App完成入门篇(七)- 完成发现页面

    第七章是入门篇的倒数第二篇文章了,明天整个APP将进入收官. 本节教程主要要教会大家使用二维码扫描和用do_WebView组件加在html页面. 导入项目 do_WebView组件 扫描功能 自定义事 ...

  6. [原创]Linq to xml增删改查Linq 入门篇:分分钟带你遨游Linq to xml的世界

    本文原始作者博客 http://www.cnblogs.com/toutou Linq 入门篇(一):分分钟带你遨游linq to xml的世界 本文原创来自博客园 请叫我头头哥的博客, 请尊重版权, ...

  7. 转:OSGi 入门篇:模块层

    OSGi 入门篇:模块层 1 什么是模块化 模块层是OSGi框架中最基础的一部分,其中Java的模块化特性在这一层得到了很好的实现.但是这种实现与Java本身现有的一些模块化特性又有明显的不同. 本文 ...

  8. 转:OSGi 入门篇:生命周期层

    OSGi 入门篇:生命周期层 前言 生命周期层在OSGi框架中属于模块层上面的一层,它的运作是建立在模块层的功能之上的.生命周期层一个主要的功能就是让你能够从外部管理应用或者建立能够自我管理的应用(或 ...

  9. 【three.js详解之一】入门篇

    [three.js详解之一]入门篇   开场白 webGL可以让我们在canvas上实现3D效果.而three.js是一款webGL框架,由于其易用性被广泛应用.如果你要学习webGL,抛弃那些复杂的 ...

随机推荐

  1. CEF禁止右键菜单

    转载:http://www.cctry.com/thread-258549-1-1.html 转载:http://blog.sina.com.cn/s/blog_dad2c54101019cmo.ht ...

  2. linux内核源码在线浏览

    1.https://elixir.bootlin.com  (只能搜索函数和宏定义,功能单一) 2.https://lxr.missinglinkelectronics.com (比第一个功能多一些, ...

  3. [CF580D]Kefa and Dishes

    题意翻译 kefa进入了一家餐厅,这家餐厅中有n个菜(0<n<=18),kefa对第i个菜的满意度为ai(0<=ai<=10^9),并且对于这n个菜有k个规则,如果kefa在吃 ...

  4. Codeforces Round #275 (Div. 2) A,B,C,D

    A. Counterexample time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  5. 解决Error: ENOENT: no such file or directory, scandir 安装node-sass报错

    新项目开发需要安装依赖,但是安装完之后通过gulp运行项目,产生了一下的报错: 解决方案是执行一些方法: npm rebuild node-sass 可是有时就是网络问题导致上面命令安装失败,查下失败 ...

  6. 如何借助 OVN 来提高 OVS 在云计算环境中的性能

    众所周知,OpenvSwitch 以其丰富的功能和不错的性能,已经成为 Openstack 部署中最受欢迎的虚拟交换机.由于 Openstack Neutron 的架构引入了一些性能问题,比如 neu ...

  7. Rails 5 Test Prescriptions 第5章 Testing Models

    Rails,model层包含业务逻辑和储存逻辑.其中储存逻辑被ActiveRecord处理. 在model中,不是每件事都必须是ActiveRecord对象.model layer可以包含各种服务,对 ...

  8. 在不同的浏览器使用不同的css样式,解决浏览器兼容问题

    区别IE6与FF:       background:orange;       *background:blue; 区别IE6与IE7:       background:green !import ...

  9. IOS-快速集成检查更新

    一直以为Appstore有了检查版本是否更新的机制,我们在APP上做这个更新功能会被拒,但是也有看到一些APP也是做了这个更新功能的.因为在网上没有找到完全正确的方法能获取到iTunes里的数据的,于 ...

  10. $'\r': command not found in Cygwin

    这是因为windows下的回车符改为Unix下的回车符,用以下命令可以批量修改. dos2unix ./*