多重影分身:一套代码如何生成多个小程序?

时间:2020-12-24 12:44:58   收藏:0   阅读:0
多重影分身:一套代码如何生成多个小程序?

技术图片
作者|BakerJ
编辑|覃云

前 言

影分身术,看过火影的都知道,一个本体,多个分身。
大家肯定要问了,那小程序开发跟影分身术也能扯上关系?没错,那自然就是:一套代码,多个小程序啦。
各位先别翻白眼,且听我细细说来。
如今小程序发展如日中天,再加上微信的力推,很多公司的业务也都慢慢的转向小程序,这让我这个安卓开发,也不得不开始了小程序开发之旅。
然而随着公司的发展,客户越来越多,核心功能相同的小程序,需要上架多个小程序分别给不同的客户使用,每个小程序之间又存在这一小部分的定制化,比如界面展示的不同、小功能的差异等等。
这可让我这个刚接触小程序开发的前端菜鸟抓狂了,每个小程序复制一份代码出来,然后做定制化的修改?这岂不是如果哪天核心业务有改动,我得对每套代码分别改动一次?不行,即使是菜鸟,对这种弄出多套重复代码的行为也是无法容忍的!
于是,就有了针对这种场景下的一个解决方案:给小程序开发来个影分身术。
Github 地址:https://github.com/BakerJQ/WeAppBunXin
该项目基于 Taro 框架,由凹凸实验室开源,非常感谢他们的努力付出。
之所以选用 Taro,主要是因为它采用 React 语法标准,而本人之前有过 ReactNative 开发经验。
由于本人接触前端开发时间不长,文中若出现了错误或者有更好的方案,欢迎各位包容和指正,万分感谢。

影分身之基础配置

影分身的能力,主要来源于 Taro 所提供的编译能力,所以需要对 Taro 的编译配置 (https://nervjs.github.io/taro/docs/config.html) 和编译配置详情 (https://nervjs.github.io/taro/docs/config-detail.html) 有所了解。
我们先来看看配置的相关文件目录:
技术图片
config 目录为 Taro 初始化后的默认配置目录,图中蓝色框框内的三个文件(dev、index、prod)为默认生成的配置文件,剩下的文件,则为分身所需的配置。图中配置了三个分身,我们以 channel1 为例,config 是该分身的一些配置,project.config.json 就是该分身小程序的基本配置,如:

{
    "miniprogramRoot": "./",
    "projectname": "channel1",
    "description": "channel1",
    "appid": "wx8888888888888",
    ...
}

channel.js 文件,则是用来指定,当前需要编译哪个小程序,如:

module.exports = {
  channel: ‘channel1‘
}

在默认的编译配置入口文件 index.js 中,我们需要配置小程序的输出目录,配置如下:

const channelInfo = require(‘./channel‘)
const config = {
    ...
    // 输入目录为 dist_channel1
    outputRoot: ‘dist_‘ + channelInfo.channel,
    ...
    // 讲 config/channel1/project.config.json 文件拷贝到 dist_channel1 下
    copy: {
    patterns: [
      {
        from: ‘config/‘ + channelInfo.channel + ‘/project.config.json‘,
        to: ‘dist_‘ + channelInfo.channel + ‘/project.config.json‘
      }
    ],
    ...
    }
    ...
}

执行 Taro 的 小程序编译命令 后,将会生成该分身对应的小程序代码文件夹 dist_channel1,直接使用小程序开发者工具打开该目录,就可以进行 channel1 小程序的预览了。
通过这些配置,我们就可以通过同一套代码,生成多个不同的小程序啦!当然,这些小程序的内容是完全一样的,顶多就是 project.config.json 中配置的名字、appid 有不同而已。
那么下面,我们就开始看看如何实现生成多个有差异化的小程序。
在具体实现之前,我们需要知道 Taro 两个重要的配置:

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!