ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

使用 Vue Native 构建跨平台原生移动应用:从 CLI 初始化到 React Native 项目集成的完整指南

使用 Vue Native 构建跨平台原生移动应用:从 CLI 初始化到 React Native 项目集成的完整指南 移动开发跨平台前端【免费下载链接】vue-native-coreVue Native is a framework to build cross platform native mobile apps using JavaScript项目地址https://gitcode.com/gh_mirrors/vu/vue-native-core点击查看免费下载导读本文围绕 Vue Native 框架的核心用法展开它以 Vue.js 的语法为入口、以 React Native 的底层能力为引擎让开发者用一套 JavaScript 代码同时产出 iOS 与 Android 原生应用。读完本文你将掌握 Vue Native CLI 的安装与项目初始化、在既有 React Native/Expo 工程中手动接入 Vue Native 的完整流程、可用组件范围以及从仓库源码层面理解“Vue 模板如何被编译并交给 React Native 执行”的底层原理。需要说明的是本仓库已在 README 中标注为“已弃用、不再维护”文中所有命令与配置均以当前仓库实际内容为准。Vue Native 是什么Vue Native 是一个使用 JavaScript 构建跨平台原生移动应用的框架。它的定位非常清晰它是 React Native API 之上的一层封装wrapper因此凡是 React Native 能做到的事Vue Native 也都能做到。正如仓库根目录 README.md 所描述Vue Native 带来的核心价值有两点Vue.js 的简洁性可以使用熟悉的 HTML 与 CSS 语法在单文件组件SFC中增量式地构建用户界面。与 React Native 的无缝互操作开箱即可用 Vue.js 语法使用 React Native 的核心组件同时覆盖 iOS 和 Android 两个平台。换句话说Vue Native 并不重新发明一套原生渲染引擎而是把 Vue 的响应式、模板语法、组件体系“翻译”到 React Native 的运行时之上。这一点从仓库的目录结构中可以直观看到src/core是标准的 Vue 2 内核instance、observer、vdom、compiler 等src/platforms/vue-native则是专门面向 React Native 平台的适配层与 Vue 2 官方仓库中platforms/web、platforms/weex的架构思路一脉相承。安装与项目初始化安装 Vue Native CLIVue Native 官方提供 CLI 工具用于生成项目全局安装命令为$ npm install vue-native-cli -g使用 CLI 之前本机还必须全局安装以下两个工具之一expo-cli基于 Expo 工具链创建和管理项目。react-native-cliReact Native 官方/社区 CLI。Vue Native CLI 本身并不直接生成原生工程而是包装wrapsexpo-cli 与 react-native-cli先调用底层 CLI 生成工程骨架再自动安装并配置来自vue-native-core的依赖最终产出一个配置完整的单页应用SPA项目。这正是 README.md 中“Project setup with Vue Native CLI”一节的机制描述。生成一个新项目CLI 用法极其简单只需一条命令$ vue-native init projectName执行后CLI 会为你搭建好 Vue Native 工程包括依赖安装与 Metro 打包器的vue扩展名识别等配置无需手工干预。仓库自身的构建与校验脚本如果你希望从源码层面了解这个框架本身是如何被构建与验证的可以查看仓库根目录的 package.json。它定义了一套完整的工程化脚本npm run lint使用 ESLint 检查src与scripts目录。npm run flow执行 Flow 类型检查仓库源码大量使用flow注解。npm run test:unit基于 Jest 运行单元测试测试用例位于tests/unit 目录。npm test依次执行 lint、flow 与单元测试的完整校验链路。npm run build通过scripts/build.js产出构建产物。npm run release通过scripts/release.sh执行发布流程。此外仓库通过 husky 配置了pre-commit钩子自动执行npm run lint:fix见 scripts/git-hooks/pre-commit保证提交代码风格一致。在已有 React Native / Expo 项目中集成 Vue NativeREADME 明确指出把 Vue Native 集成进一个已存在的 React Native 项目是可行的具体步骤记录在仓库根目录的 converting-react-native-project.md 中这些步骤同样适用于“从零手动搭建”一个 Vue Native 项目不借助 CLI。虽然 Vue Native CLI 是官方推荐的新建项目方式但理解手动集成流程能让你清楚掌握 Vue Native 与 React Native 之间的每一个衔接点也更便于排查问题。第一步安装依赖包Vue Native 由多个 npm 包协作组成运行时依赖有两个vue-native-core核心运行时库提供创建 Vue Native 组件所需的核心能力其 package.json 位于 packages/vue-native-core/package.json当前版本 0.3.1并声明react 16.3.0为 peerDependency。vue-native-helper运行时辅助库提供编译产物所需的平台指令与渲染辅助函数。开发期还需要一个额外的包来把.vue组件文件转译成 JSvue-native-scripts编译与转换 Vue 组件为 React Native 代码。在你的项目目录中执行$ npm install --save vue-native-core vue-native-helper $ npm install --save-dev vue-native-scripts三个包在仓库中分别对应 packages/vue-native-core、packages/vue-native-helper 与 packages/vue-native-scripts 目录。第二步配置 Metro 打包器React Native 使用 Metro bundler 生成应用包app bundleMetro 通过metro.config.js进行配置。在项目根目录创建或修改metro.config.js加入以下内容const { getDefaultConfig } require(metro-config); module.exports (async () { const { resolver: { sourceExts } } await getDefaultConfig(); return { transformer: { babelTransformerPath: require.resolve(./vueTransformerPlugin.js), getTransformOptions: async () ({ transform: { experimentalImportSupport: false, inlineRequires: false, }, }) }, resolver: { sourceExts: [...sourceExts, vue] } }; })();这段配置有两个关键点resolver.sourceExts把vue追加到默认的可解析扩展名列表中使 Metro 能够识别.vue文件。transformer.babelTransformerPath指向自定义的转译器插件vueTransformerPlugin.js让.vue文件在打包前先经过 Vue Native 的编译管线。Expo 用户特别注意Expo 项目不走项目根目录的metro.config.js而是通过app.json中的packagerOpts声明打包器选项。必须修改app.json让.vue文件被识别{ expo: { sdkVersion: 34.0.0, platforms: [ ios, android, web ], ... packagerOpts: { sourceExts: [js, json, ts, tsx, vue], config: metro.config.js } } }这里在sourceExts数组中显式加入了vue同时通过config字段指向metro.config.js注意文档中此处的 sdkVersion 数值以当前仓库示例为准实际使用时请替换为你自己的 Expo SDK 版本。第三步创建 vueTransformerPlugin.jsbabelTransformerPath指向的vueTransformerPlugin.js需要创建在项目根目录内容如下const vueNativeScripts require(vue-native-scripts); const upstreamTransformer require(metro-react-native-babel-transformer); const vueExtensions [vue]; // -- Add other extensions if needed. module.exports.transform function ({ src, filename, options }) { if (vueExtensions.some(ext filename.endsWith(. ext))) { return vueNativeScripts.transform({ src, filename, options }); } return upstreamTransformer.transform({ src, filename, options }); };这个文件的职责是按文件扩展名分流以.vue结尾的文件交给vue-native-scripts的transform处理其余 JS 文件继续走 React Native 默认的 Babel 转译器。不同 React Native 版本的上游转译器差异上游转译器upstreamTransformer的引入路径随 React Native 版本而变化。仓库源码 src/platforms/vue-native/scripts/transformerPlugin.js 中按 RN 小版本做了精确的分支处理它读取react-native/package.json中的版本号并取minor值判断RN ≥ 0.59metro-react-native-babel-transformer当前推荐路径RN 0.56 – 0.58metro/src/reactNativeTransformerRN 0.52 – 0.55metro/src/transformerRN 0.47 – 0.51metro-bundler/src/transformerRN 0.46metro-bundler/build/transformerRN ≤ 0.45react-native/packager/transformer以兼容方式包装也就是说vueTransformerPlugin.js中upstreamTransformer的引入路径应当与你使用的 React Native 版本匹配README 提到 Vue Native 不再支持 0.59 之前的旧版本因此新项目直接使用metro-react-native-babel-transformer即可。另外src/platforms/vue-native/scripts/transformerPlugin.js 的transform函数还做了两件值得注意的事兼容 RN ≥ 0.46 的传参方式当src是对象即{ src, filename, options }打包传入时先解构再分发给上游转译器。Source Map 支持先用compileVueToRn即仓库内的reactVueTemplateParser把.vue源码编译为 JS 输出若编译产物带mappings则通过source-map的SourceMapConsumer与babel-traverse把生成的 Babel AST 的行号回映射到.vue源码的行号见函数sourceMapAstInPlace从而保证.vue文件中的错误能定位到原始模板位置。第四步导入.vue组件配置完成后在 React Native 应用中即可像导入普通模块一样导入 Vue 组件import VueComponent from ./VueComponent.vue只要对应目录下存在VueComponent.vue文件转译器就会解析它并交给 React Native bundler 继续处理。可用的 React Native 组件范围Vue Native 对组件的接入策略非常省心README.md 明确指出React Native 0.63 及之后的全部核心组件都会被全局注册在模板中无需 import 与局部注册即可直接使用。组件的完整清单与用法可参考 React Native 官方的“Components and APIs”文档。那些曾经存在、后来从 React Native 核心中被弃用的组件仍可通过安装各自的独立包继续使用。例如要使用WebView就安装react-native-webview包。这一“全局注册”机制在源码层面由运行时组件构建模块支撑仓库 src/platforms/vue-native/runtime/components/index.js 统一导出buildComponent、buildDirective、buildNativeComponent、buildWebTransition、buildWebEmptyComponent、buildWebInputComponent等构建函数它们负责把模板中出现的标签名映射为 React Native 的原生组件或 Web 兼容组件。源码结构理解 Vue Native 的编译与运行链路仓库采用 monorepo 组织核心代码在src目录四个发布包位于 packages 目录。各包与源码目录的对应关系各包 README 均注明“本包为自动生成贡献代码请到 src 对应目录”如下发布包对应源码目录职责vue-native-coresrc/platforms/vue-native/runtime运行时生命周期、渲染混入、组件/指令构建vue-native-helpersrc/platforms/vue-native/runtime/helpers.js平台指令、渲染辅助函数render helpers与组件构建导出vue-native-scriptssrc/platforms/vue-native/scripts/index.js暴露compileVueToRn与transform供 Metro 转译器调用vue-native-template-compilersrc/platforms/vue-native/compiler/index.js模板编译同时导出 web 与 native 两套编译入口模板编译的双平台设计src/platforms/vue-native/compiler/index.js 只是简单的聚合导出export * from ./web与export * from ./native真正的编译逻辑分两条线native 编译器src/platforms/vue-native/compiler/native.js调用 Vue 内核的parse与processAttrs解析模板得到 AST然后交给NativeRenderGenerator生成 render 代码与 import 代码。它默认开启preserveWhitespace: false并在遍历 AST 时处理render-prop/render-prop-fn这类渲染属性插槽语法——这些属性会被提升为父组件的 props同时从子节点树中移除。生成 render 代码后还会做“多余逗号清理”并把 render props 所需但 import 中缺失的模块补进vue-native-helper的 import 语句。web 编译器src/platforms/vue-native/compiler/web.js面向 Web 平台渲染同样先parse再交给WebRenderGenerator生成代码空模板时直接输出export default () null。与之对应的代码生成器位于 src/platforms/vue-native/compiler/codegen 目录其中NativeRenderGenerator、WebRenderGenerator与BaseGenerator共同构成了“Vue 模板 → React Native 可执行代码”的核心翻译层。运行时组装src/platforms/vue-native/index.js 是整个平台的入口从./runtime/index引入 Vue 实例并挂载observer扩展Vue.observer observer。src/platforms/vue-native/runtime/index.js 则通过lifeCycleMixin(Vue)与renderMixin(Vue)把生命周期与渲染逻辑混入 Vue 构造函数。也就是说Vue Native 并不是一份独立的 Vue 分支而是在 Vue 2 内核src/core之上叠加 React Native 平台适配这也是它能“用 Vue 的思维写 React Native 应用”的根本原因。维护状态与使用须知最后必须强调本项目的当前状态README.md 开头以醒目标识声明“此项目已弃用deprecated不再维护”。因此本文所有命令与配置来自当前仓库的快照内容如vue-native-core版本 0.3.1仅供学习参考与既有项目迁移理解新项目的技术选型请务必结合自身场景另行评估不要基于此文档作为生产选型的唯一依据仓库采用 MIT 许可见根目录 LICENSE允许自由使用与修改README 的“Credits”一节特别致谢了 react-vue 项目作者指出 Vue Native 的大部分工作来源于 react-vue——这解释了其“Vue 模板 → React 运行时”编译思路的历史渊源。小结回顾整篇文章Vue Native 的实践路径可以概括为三条一是用vue-native-cli init projectName一键生成工程二是在既有 React Native/Expo 项目中通过“安装三件套依赖 Metro 配置 自定义转译插件 import.vue文件”手动接入三是从源码层面理解“Vue 内核 vue-native 平台适配层”的编译与运行架构。无论你是在阅读历史代码、迁移旧项目还是研究“Vue 语法如何映射到 React Native 原生组件”这类跨框架编译思路当前仓库的 README.md 与 converting-react-native-project.md 都是最直接的入口文档。赞分享移动开发跨平台前端【免费下载链接】vue-native-coreVue Native is a framework to build cross platform native mobile apps using JavaScript项目地址https://gitcode.com/gh_mirrors/vu/vue-native-core点击查看免费下载相关推荐React Native Firebase 集成指南从零开始构建跨平台应用React Native Firebase 集成指南从零开始构建跨平台应用 前言 React Native Firebase 是 React Native 生移动开发后端CDSAPIPython访问哥白尼气候数据存储库的官方APICDSAPIPython访问哥白尼气候数据存储库的官方API CDSAPI是欧洲中期天气预报中心ECMWF开发的开源Python库专门用于访问哥白尼气候前端Web框架React Native Community CLI 终极指南从零开始构建跨平台应用React Native Community CLI 终极指南从零开始构建跨平台应用 React Native Community CLI 是构建跨平台移动应上一篇csvkit与Python扩展csvpy实现自定义数据处理功能下一篇用 Vue 与 Zig 构建原生桌面应用Native SDK Vue 示例完整实战指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表