Vue 项目如何迁移小程序

最近咱们看到有开发者在社群里提出新的疑问「我手头现已有一个老练的 HTML5 项目了,这种项目能够转为小程序在 FinClip 环境中运转吗?」。

经过工作人员的沟通了解,开发者其实是想将已有的 Vue 项目转为小程序,在集成了 FinClip SDK 的 App 中运转小程序,那这儿咱们就需求关注以下两个留意事项:

  1. Web 项目是适合在手机等移动设备中运转的,屏幕现已兼容;
  2. H5 项目的代码是前后端分离的;

在本篇文章中,咱们挑选运用了一款老练的跨渠道结构 uni-app 来处理这个问题。

第一步:创立 uni-app 项目

一切都需求先从一个 uni-app 项目开端,然后再一次进行。

1. 全局安装 vue-cli

npm install -g @vue/cli

2. 经过 CLI 创立 uni-app 项目

vue create -p dcloudio/uni-preset-vue uniapp-project

留意:创立 CLI 工程时会长途下载 dcloudio/uni-preset-vue,拉取失败时如出现如下图所示的过错。这个时分能够经过手动下载模板来创立项目。github.com/dcloudio/un…

Vue 项目如何迁移小程序

下载结束后复制当前的文件途径,而且经过指令行来创立项目。

Vue 项目如何迁移小程序

进入指令行之后,需求经过vue create -p 文件途径名 项目名来创立项目,输入指令之后会提示挑选项目模板,这儿咱们挑选默许模板。

Vue 项目如何迁移小程序

3. 在 VS Code 中翻开创立的 uni-app 项目

Vue 项目如何迁移小程序

当咱们能够翻开这个 uni-app 的项目时,就意味着至此,一个 uni-app 项目现已创立好了!接下来咱们开端对代码进行一些处理优化。

第二步:代码处理

在代码处理过程中,咱们需求分别对项目文件,标签代码,js 代码和 css 代码进行针对性优化,以下是对应的优化处理内容。

1. 文件处理

  1. 把之前的 vue H5 项目的前端代码复制到新项目下;
  2. 假如之前的文件后缀名是 .html,需求改为 .vue,并留意遵从vue 单文件组件 SFC 规范,比方有必要一级根节点为 template、script、style,template 节点下有必要且只能有一个根 view 节点,所有内容写在这个根 view 节点下。
  3. 处理页面路由
    uni-app 默许是小程序的路由方法,在 pages.json 里办理页面。假如你运用 vue rooter 的话,一种是改造为 pages.json 方法,另一种是运用三方插件,比方vue rooter for uni-app
  4. 静态文件(如图片)挪到 static 目录
    uni-app 工程目录下有个 static 目录,用于存放静态文件,这个目录不编译,直接全体复制到发行代码里的。假如你期望自定义静态资源目录,能够在vue.config.js中自定义。

2. 标签代码处理

  1. 相同功能的组件自动转化
    uni-app 的标签组件与小程序相同,比方<div>变成了<view><span>变成了<text>
    但 uni-app 的编译器现已自动处理了这部分转化,假如源码中写了可自动转化的组件,在编译到非 H5 端时会被自动转化(再编译回到 H5 端时 div 仍是 div)。
  • div 改成view
  • span、font 改成text
  • a 改成navigator
  • img 改成image
  • select 改成picker
  • iframe 改成web-view
  • ul、li没有了,都用 view 替代
  1. 区域翻滚运用 scroll-view,不再运用 div 的区域翻滚处理方法
  2. 左右、上下滑动切换,有专门的swiper 组件,不要运用 div 模拟
  3. input 的 search,本来的 type 没用了,改成 confirmtype,详见这儿
  4. audio 组件不再推荐运用,改成 api 方法,详见这儿
  5. 之前的 v-html,能够在 H5 端和 App 端(需v3编译器)运用,不能在小程序中运用。如需求在小程序运用,请运用 rich-text 组件或 uparse 扩展插件,详见这儿

3. js 代码处理

uni-app 的非 H5 端,不管是 App 仍是各种小程序,都不支撑 window、navigator、document 等 web 专用对象。uni-app 的 API 与小程序保持一致,需求处理这些不同的 API 写法。

  1. 处理 window api
  • ajax 改成 uni.request。(插件商场也有适配 uni-app 的 axios、flyio 等封装拦截器)
  • cookie、session.storage 没有了,改用 uni.storage 吧;local.storage 也改成uni.storage。另外插件商场有一个垫片mp-storage,可运用之前的代码,兼容运转在 uni-app上,
  • alert,confirm 改成uni.showmodel
  • window 的 resize 改为了uni.onWindowResize
  1. 处理 navigator api
  • geolocation 的定位方法改为uni.getLocation
  • useragent的设备 api 没有了,改用uni.getSystemInfo
  1. 处理 dom api
  • 假如运用标准 vue 的数据绑定,是不需求操作 dom 来修正界面内容的。假如没有运用 vue 数据绑定,仍然混写了 jquery 等 dom 操作,需求改为纯数据绑定
  • 有时获取 dom 并不是为了修正显现内容,而是为了获取元素的长宽尺寸来做布局。此刻 uni-app 提供了同小程序的另一种 api,uni.createSelectorQuery
  1. 其他 js api
  • web 中还有 canvas、video、audio、websocket、webgl、webbluetooth、webnfc,这些在 uni-app 中都有专门的 api。
  1. 生命周期
  • uni-app 弥补了一批类小程序的声明周期,包含 App 的发动、页面的加载,详见这儿
  • vue h5 一般在 created 或许 mounted 中恳求数据,而在 uni-app 的页面中,运用 onLoad 或许 onShow 中恳求数据。(组件仍然是 created 或许 mounted)
  1. 少数不常用的 vue 语法在非 h5 端仍不支撑,data 有必要以 return 的方法编写,留意事项详见这儿

留意:假如你运用了一些三方 ui 结构、js 库,其中引用了包含一些运用了dom、window、navigator 的三方库,除非你只做 H5 端,否则需求更换。去 uni-app 的插件商场寻觅替代品。假如找不到对应库,有必要运用 for web 的库,在 App 端能够运用renderjs来引入这些 for web 的库。

4. css 代码处理

uni-app 发布到 App(非nvue)、小程序时,显现页面仍然由 webview 渲染,css 大部分是支撑的。但需求留意以下内容:

  • 不支撑 *挑选器
  • 没有 body 元素挑选器,改用 page 元素挑选器。(编译到非 H5 时,编译器会自动处理。所以不改也行)
  • div 等元素挑选器改为 view,span 和 font 改为 text,a 改为 navigator,img 改为 image…(编译到非 H5 时,编译器会自动处理。所以不改也行)
  • 不同端的浏览器兼容性仍然存在,避免运用太新的 css 语法,否则发布为 App 时,Android 低端机(Android 4.4、5.x),会有样式过错。

经过以上过程,基本上就能够把已有的 vue 项目转为对应的小程序代码规范了。

第三步:将小程序移动至 FinClip 中

在完结以上工作任务后,咱们应该在 uni-app 中现已得到了一个结构完整且能够运转的非 H5 项目了。最终,咱们能够经过在 uni-app 中代码发布为微信小程序,或许直接经过集成 FinClip 插件的方式进行处理,这两种方式都比较简单。

运用 uni-app 将小程序发布为微信小程序

Vue 项目如何迁移小程序

咱们能够直接在编译器中将代码发布为“微信小程序”的相关格局,随后再经过 FinClip 翻开对应的小程序,最终就能够直接运转了。


到这儿,将已有根据 Vue 格局编译的 H5页面就能够正常搬迁为对应的小程序了,假如假如你在运用过程中遇到了任何困难,也能够加入 FinClip 开发者社群了解更多信息。