HBuilderX 自 2.0.3 版本开始,nvue文件同时支持两种编译模式:

weex 模式:老模式,使用 weex组件,写法同weex标准写法。只能在 App 端中运行,部分 uni-app JS Api 不能使用。

uni-app 模式:新模式,默认模式,使用 uni-app 基础组件,组件、jsapi写法同uni-app。支持app.vue里的全局样式;支持nvue页面编译H5和小程序端;可以使用绝大部分 uni-app Api 。uni-app模式也可以使用weex里的组件,比如list、refresh、recircle-list。

为什么要提供2个模式?

weex模式的组件、渲染机制是weex官方维护的。它的渲染性能其实与react native是一样的,在性能体验方面足以应付一线互联网公司的苛求。但它有4个问题:

内置组件较少,或不完善。与小程序的组件相比,weex缺少太多内置组件,比如picker、map。而video等weex已内置的组件,也不够强大

API缺失严重。因为weex只是个渲染器,它调用设备能力或push等三方sdk,都需要原生开发。

周边生态不完善。weex生态没有什么好的组件和模板。而uni-app的插件市场里众多优秀的组件和模板又无法用于nvue。

nvue无法多端开发,只能用于app。开发者在多端需要维护多套代码。

weex的排版思路和uni-app的vue差异有点多。比如weex不支持rpx。我们希望使用原生渲染,但尽可能多的兼容开发者的习惯。

weex的第二个问题,即能力问题,uni-app通过给nvue补充uni API和plus API,得到了解决。

但剩下的几个问题,需要uni-app的新编译模式才能解决。

我们要把小程序的所有组件,在weex的原生渲染机制上,重新实现一遍,让小程序的组件可以直接用原生来渲染。然后包括uni ui等扩展组件也都将兼容nvue。

现在插件市场的新闻模板,已经支持nvue新编译模式,它可以一套代码编译到App、小程序、H5全端。并且在App上是原生渲染的高性能体验。

之所以仍然存在weex模式,一是为了向下兼容,之前已经使用nvue的weex模式开发的app,不会因为HBuilderX的升级而导致页面错乱;二是为了方便weex的老用户迁移。

对于普通开发者,正常来讲应该选择uni-app编译模式。

注意nvue的uni-app编译模式,仍然是要求写nvue文件。

配置方式--uni-app编译模式或weex编译模式

在 manifest.json 的源码视图里配置是切换模式, manifest.json -> app-plus -> nvueCompiler 切换编译模式。

nvueCompiler 有两个值:

weex

uni-app// manifest.json

{

// ...

/* App平台特有配置 */

"app-plus": {

"nvueCompiler":"uni-app" //是否启用 uni-app 模式

}

}

差异说明

组件差异

在老的 weex 模式中,我们使用的是 weex组件 遵循的是 weex规范,如果使用 nvue 页面将不能跨端开发,仅能在 App 端运行。如果跨端那么意味着要实现vue 页面和 .nvue 页面两套代码。

代码示例

测试页面

而在 uni-app 模式中,我们将可以在 weex 组件的基础上使用 uni-app 的基础组件,目前已支持部分组件,并支持 .nvue 页面编译到 H5 和小程序端。

代码示例

测试页面

nvue的uni-app编译模式组件使用注意

组件的使用注意事项:

组件

注意事项text

文字尽量写在text节点,非text节点的文字无法自动更新

rich-text

nodes 属性只支持节点列表不支持 HTML String

web-view

必须指定高度,不支持页面通讯和网页内使用Plus API 。但在nvue里可以使用plus.webview.create来创建webview。这样的webview能力上更强大,但注意和原页面会有层级问题

默认页面滚动差异

在 weex 模式中,我们需要页面滚动,必须使用 组件或者 组件,这与我们开发小程序或者 web 的习惯并不符合。而在 uni-app 模式中,则可以像 vue 页面一样方便开发,不需要去声明额外的组件进行滚动,只要页面内容高度高于屏幕,就会自动滚动。实际上,在新模式里自动给每个nvue页面的根下套了一个scroller。

单位差异

weex的px是动态单位,并且不支持rpx。这与uni-app的设计不符。

在新模式中,rpx和px分别是动态单位和静态单位,与vue的设计一样。

Tips

uni-app 模式示例可参考:新闻/资讯类App模板。

注意事项

API 注意事项

.nvue 支持大部分 uni-app API 。详情

css 注意事项

在 .nvue 中,有些 css 样式需要注意,与 web 开发中样式写法会有区别。

1、只有text标签可以设置字体大小,字体颜色

2、布局不能使用百分比

3、只能使用 class 选择器

/* 错误 */

#id {}

.a .b .c {}

.a > .b {}

/* 正确 */

.class {}

4、border 不支持简写

/* 错误 */

.class {

border: 1px red solid;

}

/* 正确 */

.class {

border-width: 1px;

border-style: solid;

border-color: red;

}

5、background 不支持简写

/* 错误 */

.class {

background: red;

}

/* 正确 */

.class {

background-color: red;

}

6、.nvue 页面的布局排列方向默认为竖排(column),如需改变布局方向,可以在 manifest.json -> app-plus -> nvue -> flex-direction 节点下修改,仅在 uni-app 模式下生效。详情

7、nvue的uni-app编译模式下,App.vue 中的样式,会编译到每个 nvue文件。非uni-app编译模式不会。对于共享样式,如果有不合法属性控制台会给出警告,可以通过条件编译屏蔽 App 中的警告。

/* 错误 */

/* 控制台警告:WARNING: `border` is not a standard property name (may not be supported) */

.class {

border: 1px red solid;

}

/* 正确 */

.class {

border-width: 1px;

border-style: solid;

border-color: red;

}

默认逻辑

若 manifest.json 配置文件中,未明确指定编译模式(即未配置app-plus -> nvueCompiler),在HBuilderX2.4以前,默认值为 weex 模式,2.4起默认值改为 uni-app 模式。

nvue编译为H5、小程序时注意

nvue页面编译为H5、小程序时,会做一件css默认值对齐的工作。

因为weex布局只支持flex,并且默认flex方向是垂直。而H5和小程序端,使用web渲染,web默认不是flex,并且设置display:flex后,它的flex方向默认是水平的。

所以nvue编译为H5、小程序时,会自动把页面默认布局设为flex、方向为垂直。当然开发者手动设置后会覆盖默认设置。

vue几种编译_nvue不同编译模式介绍相关推荐

  1. [Vue源码分析] 模板的编译

    最近小组有个关于vue源码分析的分享会,提前准备一下- 前言: Vue有两个版本:Runtime + Compiler . Runtime only ,前者是包含编译代码的版本,后者不包含编译代码,编 ...

  2. Linux centos7升级内核(两种方法:内核编译和yum更新)

                Linux centos7升级内核(两种方法:内核编译和yum更新) Linux的内核概念不用说大家也很清楚,正是内核版本的不同,才有Linux发行版本的说法,现在主流的cen ...

  3. 使用高级语言编写计算机程序步骤,计算机执行用高级语言编写的程序主要有两种途径解释和编译编译专.doc...

    计算机执行用高级语言编写的程序主要有两种途径解释和编译编译专.doc 计算机执行用高级语言编写的程序主要有两种途径:解释和编译 编译:专指由高级语言转换为低级语言编译和解释的区别: 是否产生目标程序 ...

  4. calwrf编译linux红帽,WRF模式运行手册

    WRF 模式运?行?手册 ?二○?一○年?八?月?二?十四?日 ?目 录 第?一部分 WRF模式介绍3 第?二部分模式运?行环境搭建3 1.所需的各种组件3 2.Linux操作系统(略)4 3.安装P ...

  5. Go 语言又称 Golang,是谷歌(Google)开发的一种静态强类型、编译型、并发型的编程语言。2009 年 11 月 10 日,Go 语言以开源方式向全球发布,如今许多大公司纷纷选择使用 Go

    Go 语言又称 Golang,是谷歌(Google)开发的一种静态强类型.编译型.并发型的编程语言.2009 年 11 月 10 日,Go 语言以开源方式向全球发布,如今许多大公司纷纷选择使用 Go ...

  6. 拒绝编译等待 - 动态研发模式 ARK

    作者:字节跳动终端技术--徐纪光 背景 iOS 业界研发模式多为 CocoaPods + Xcode + Git 的多仓组件化开发模型.为追求极致的研发体验.提升研发效率,对该研发模式进行了大量优化, ...

  7. Vue源码解析:模版编译之来龙去脉(一)

    模版编译,Vue的有一大特点.我们在开发中常常会将看似html的代码都写在<template></template>标签中.说看似html代码,是因为在原生html中没有类似与 ...

  8. Java编译分类:前端编译和后端编译

    ava程序代码需要编译后才能在虚拟机中运行,编译涉及到非常多的知识层面:编译原理.语言规范.虚拟机规范.本地机器码优化等:了解编译过程有利于了解整个Java运行机制,不仅可以使得我们编写出更优秀的代码 ...

  9. java全jit编译_JVM即时编译(JIT)(转载)

    原文出处:https://blog.csdn.net/sunxianghuang/article/details/52094859 什么是JIT 1.动态编译(dynamic compilation) ...

最新文章

  1. 2021年春季学期-信号与系统-第十一次作业参考答案-第五小题
  2. 关于迭代器中IEnumerable与IEnumerator的区别
  3. Python的捕虫笔记
  4. aptitude安装出现依赖_据说 pip install 今年将出现重大变化!
  5. 家长又放心了一些!教育类App不能再干这些事了
  6. 103.二叉树的锯齿形层次遍历:DFS解法
  7. 【python3.X】python学习中排雷过程^_^
  8. Nginx 学习--初级篇,Nginx 认识以及作用
  9. C语言之如何判断闰年:
  10. linux桌面lxde 安装_如何在Arch Linux上安装LXDE桌面
  11. mysql right关键字_MYSQL 中的LEFT( RIGHT ) JOIN使用ON 与WHERE 筛选的差异
  12. 全球知名浏览器盘点,跨境电商的你知道吗?
  13. Qt之QLCDNumber
  14. 创建酷炫的 CollectionViewCell 转换动画
  15. Workbooks.Add和Sheets.Add以及Workbooks.Open
  16. 居然是 admin/123456,乌克兰这军方系统也是……
  17. 景德镇特色的部门级别与权限
  18. PyTorch随笔 - Sequential 和 ModuleList 的简要介绍
  19. linux命令总结及服务器搭建(VIP典藏版)
  20. Juniper入门之RIP

热门文章

  1. 尘锋信息基于 Apache Paimon 的流批一体湖仓实践
  2. 百度地图通过具体位置定位
  3. 从伦敦金中学习爆仓的原因
  4. 2021年危险化学品经营单位安全管理人员新版试题及危险化学品经营单位安全管理人员考试技巧
  5. 水从液态到气态JAVA,水一定是固态液态和气态吗?在马里亚纳海沟深处的水是另一种形态...
  6. IO操作和DMA、RDMA
  7. 超级简单的复合运算计算器JAVA算法,含源码
  8. 如何给头像增加圣诞帽
  9. HTTP(浏览器访问)请求的整个过程
  10. python绘制n阶科赫曲线线段_骚操作:用Python来一场人工造雪