最近一直在折腾移动端开发,作为一个 Vue 3 的"忠实拥趸",我遇到了一个非常现实的问题:我想用 Vue 3 写一个体验接近原生的 App,但是市面上能打的方案几乎没有。
你可能第一反应是:uni-app 啊,一套代码搞定小程序、App、H5,多香!
说实话,我刚入坑也是这么想的。但是用着用着,就发现了一些让人头皮发麻的问题。
先聊聊 uni-app 那些让我崩溃的瞬间
我不是故意黑谁,纯粹是真实体验后的吐槽。
第一,长列表掉帧。我的列表也就几百条数据,还是简单的图文混排,在低端安卓机上滑动就跟 ppt 一样。你去查原因,最后发现底层还是 WebView 那一套,渲染压力一大就原形毕露。
第二,调用原生 SDK 简直是噩梦。项目需要集成人脸识别 SDK,官方文档几乎空白。你得写 renderjs,写 plus 桥接,各种回调嵌套,调试起来想砸电脑。升级一次 HBuilderX,之前的桥接代码还可能要改——就问你受不受得了?
第三,生态绑定。你想用 Vite?抱歉,默认是 uni-app 自己的编译工具。你想用 Pinia?能用,但总感觉哪里不对劲。TypeScript 的类型提示时有时无,Vue 3 的 Composition API 支持得也不够丝滑。
说白了,uni-app 解决的是“有没有”的问题,而不是“好不好”的问题。
直到我发现了这个宝藏:NativeScript-Vue 3

本来我已经准备妥协,要么用Flutter 写 Dart,要么用 React Native 写 JSX。就在这时候,一个群里的大佬甩了个链接。
我点进去一看,NativeScript-Vue 3。
说实话,之前听说过 NativeScript,但那会儿它主要还是支持 Angular 和纯 JS。Vue 3 版本一直处于“在路上”的状态。没想到现在已经正式杀出来了,而且连尤雨溪本人都在推特上点过赞。
这意味着什么?意味着它不是野鸡项目,而是获得了 Vue 官方创始人的技术认可。

它到底是个什么东西?我用人话给你解释
你可以把 NativeScript-Vue 3 理解为:
Vue 3 的自定义渲染器 + NativeScript 原生渲染引擎
听上去有点抽象?没关系,我打个比方:
uni-app 是先把 Vue 模板编译成 HTML/CSS/JS,然后扔进一个 WebView 容器里显示 —— 相当于你做了个网页,然后用一个浏览器壳子包起来。
NativeScript 则是直接把你的
<template>编译成 iOS 的 UIKit 控件和 Android 的原生控件 —— 相当于你写的 Vue 代码,最终变成了真正的按钮、列表、输入框。
没有 WebView,没有中间商赚差价。启动速度从秒级直接降到 1 秒以内,长列表流畅得像德芙一样丝滑。
最让我心动的是这三点
1. Vue 3 全家桶,原生体验
你还在用 Vite?没问题,NativeScript-Vue 3 直接支持。Pinia?照用不误。Composition API 更是原生支持,类型推断准确得让人感动。
换句话说,你平时怎么写 Vue 3 网页,就怎么写 NativeScript 应用。不需要学新的 DSL,不需要适应奇奇怪怪的写法。
<template><page><action-bartitle="我的App" /><list-view:items="users"><template #default="{ item }"><flexbox-layout><label:text="item.name" /></flexbox-layout></template></list-view></page></template><scriptsetup>import { ref } from 'nativescript-vue'const users = ref([{ name: '张三' },{ name: '李四' }])</script>
看到没?除了标签名字变成了 page、label 这些原生组件,核心逻辑和 Vue 3 网页开发几乎一模一样。
2. 直接调用原生 API,想用什么调什么
这是最让我兴奋的地方。
在 NativeScript 里,你可以直接在 Vue 代码里写:
// 调用 iOS 的 UIKitconst alert = new UIAlertView()alert.title = "提示"alert.show()// 调用 Android 的 Toastconst toast = android.widget.Toast.makeText(context, "你好", Toast.LENGTH_SHORT)toast.show()
不需要桥接,不需要中间层,不需要写什么 renderjs。因为你的代码本身就运行在原生环境里,原生对象就在那里等着你调用。
这意味着你想集成什么第三方 SDK,比如极光推送、支付宝支付、高德地图,都有成熟的插件或者直接自己封装,成本比 uni-app 低太多了。
3. 不被任何厂商生态锁定
uni-app 深度绑定 DCloud 的工具链,以后你想迁移到其他方案,成本很高。而 NativeScript-Vue 3 是基于开源社区和 Progress 公司的,它的编译工具、CLI、插件体系都是开放的。
你可以用 Vite 做构建,用 npm 管理依赖,用你熟悉的任何编辑器(VS Code、WebStorm)写代码。它更像是一个纯粹的“Vue 代码转原生”的编译器,而不是一个全家桶平台。
当然,它也不是没有缺点
我不能光吹不踩,毕竟没有完美的方案。
中文资料少:目前大多数文档和社区讨论还是英文的,这对部分开发者不太友好。
社区规模不如 uni-app:毕竟 uni-app 背靠国内庞大的流量,而 NativeScript 在国际上更火,国内知晓度还在爬坡。
小程序不支持:如果你需要同时发布微信小程序,那 NativeScript 帮不了你,它只做真正的 iOS 和 Android App。
所以如果你的项目只需要做 App,不涉及小程序,那我强烈建议你试试。如果你必须兼顾小程序,那可能还得结合其他方案。
我的真实想法:Vue 生态终于补齐了最后一块短板
说实话,作为一名 Vue 3 开发者,每次看到 React 那边有 React Native,Flutter 那边有各种华丽组件,我心里都挺羡慕的。不是 Vue 不够好,而是移动端原生渲染这条路上,一直缺少一个“官方气质”的解决方案。
现在 NativeScript-Vue 3 来了,而且来得正是时候。Vue 3 的响应式系统、组合式 API、TypeScript 全面支持,再加上原生级别的渲染性能,我觉得它完全有潜力成为下一代 Vue 移动端开发的首选。
我身边已经有朋友开始用这个方案接手公司的 App 重构了。原来的安卓/iOS 双端维护成本太高,换 NativeScript 之后,一个 Vue 前端就能搞定两端,老板一拍腿,给你加工资。
如果觉得阿浪的文章写得还行,麻烦动动小手点个关注,点个赞支持阿浪一下,我会持续更新更多硬核干货,谢谢大家!
夜雨聆风