微信小程序转uni-app过程记录及心得

这是一篇使用开源小工具miniprogram-to-uniapp 的使用心得记录,因为工作需要,自己尝试过手动搬页面,但觉得重复性搬运实在繁琐,而且耗费时间,所以在网上找了找有没有现成的工具,终于看见这么个小工具,感谢开源的作者。

转换工具文档:miniprogram-to-uniapp使用指南

推荐一下源码:https://github.com/zhangdaren/miniprogram-to-uniapp

源码粗略分析

主要命令: 【wtu -i "你的小程序项目路径" -o "输出目录,可不填"】

wtu这个命令是作者通过node的commander来实现了自己的全局命令,输入命令后执行了transform这个函数。

核心代码如下:

async function transform(sourceFolder, targetFolder) {
    fileData = {};
    routerData = {};
    imagesFolderArr = [];

    let miniprogramRoot = sourceFolder;
    if (!targetFolder) targetFolder = sourceFolder + "_uni";
    //读取小程序项目配置
    const configData = wxProjectParse(miniprogramRoot, sourceFolder);

    //小程序项目目录,不一定就等于输入目录,有无云开发的目录结构是不相同的。
    miniprogramRoot = configData.miniprogramRoot;

    //定义全局变量,之前传来传去的,过于麻烦
    global.miniprogramRoot = miniprogramRoot;
    global.sourceFolder = sourceFolder;
    global.targetFolder = targetFolder;
    global.globalUsingComponents = {};  //后面添加的全局组件
    global.props = {};  //存储wxml组件页面里面,需要对外开放的参数(本想不做全局的,然而传参出现问题,还是全局一把梭)
    global.wxsInfo = {}; //存储页面里的wxs信息,数据格式如上所示
    if (fs.existsSync(targetFolder)) {
        //清空output目录
        fs.emptyDirSync(targetFolder);
    } else {
        //不存在就创建
        fs.mkdirSync(targetFolder);
    }

    traverseFolder(miniprogramRoot, miniprogramRoot, targetFolder, () => {
        //处理文件组
        filesHandle(fileData, miniprogramRoot).then(() => {
            //处理配置文件
            configHandle(configData, routerData, miniprogramRoot, targetFolder);

            //输出提示
            setTimeout(()=>{
                log('注意:当看到"image漏网之鱼",意味着您需要手动调整对应代码,表示image标签的src属性是含变量或表达式,工具还无法做到100%转换,需要手动修改为相对/static目录的路径\r\n'+
                '另外,代码