美文网首页
uniapp自定义条件编译-定制化产品

uniapp自定义条件编译-定制化产品

作者: 承诺一时的华丽 | 来源:发表于2021-07-13 14:34 被阅读0次

背景

最近有个uniapp小程序产品,产品需要根据不同地区有不同的定制化需求,这边用到的是uniapp的自定义条件编译,实现一套前端代码,可以经过编译生成不同的定制化产品,并且不会因为是兼容了多个产品,而在线上产生冗余代码。

uniapp从2019年8月就已经支持自定义条件编译,如果不自定义,uni-app默认支持如下枚举值:h5、mp-weixin、mp-alipay、mp-baidu、mp-toutiao、mp-qq,我们可以通过在package.json文件中增加uni-app扩展节点(开发中需要去掉注释),可实现自定义条件编译平台(如钉钉小程序、微信服务号等平台)

package.json配置扩展节点

// package.json文件中不允许出现注释,否则扩展配置无效
{
    /**
     package.json其它原有配置
     */
        "uni-app": {// 扩展配置
            "scripts": {
            "shequ-platform": {//自定义编译平台配置,可通过cli方式调用
                "title":"智慧社区",// 在HBuilderX中会显示在 运行/发行 菜单中
                "BROWSER":"", //运行到的目标浏览器,BROWSER 仅在UNI_PLATFORM为h5时有效,目前仅限如下枚举值:Chrome、Firefox、IE、Edge、Safari、HBuilderX
                "env": {//环境变量
                    "UNI_PLATFORM": "mp-weixin"//基准平台,UNI_PLATFORM仅支持如下值:h5、mp-weixin、mp-alipay、mp-baidu、mp-toutiao、mp-qq
                 },
                "define": {//自定义条件编译
                    "SHEQU-PLATFORM": true//自定义条件编译常量,建议为大写
                }
            },
            "nxdw-platform": {
                "title":"宁夏党委大院",
                "BROWSER":"",
                "env": {
                    "UNI_PLATFORM": "mp-weixin"
                 },
                "define": {
                    "NXDW-PLATFORM": true
                }
            },
            "nxsz-platform": {
                "title":"宁夏数字大院",
                "BROWSER":"",
                "env": {
                    "UNI_PLATFORM": "mp-weixin"
                 },
                "define": {
                    "NXSZ-PLATFORM": true
                }
            }
        }   
    }
}

配置完成后编辑器运行,发行出现如下内容


在这里插入图片描述 在这里插入图片描述

代码应用

基本语法:以 #ifdef 或 #ifndef 加 %PLATFORM% 开头,以 #endif 结尾。

html

<!-- #ifdef SHEQU-PLATFORM -->
    <text class="test" @click="testHandle">社区</text>
    <image src="../../static/shequ-platform/weixin.png"></image>
<!--  #endif -->
<!--  #ifdef NXDW-PLATFORM -->
    <text class="test" @click="testHandle">宁夏党委大院</text>
    <image src="../../static/nxdw-platform/weixin.png"></image>
<!--  #endif -->
<!--  #ifdef NXSZ-PLATFORM -->
    <text class="test" @click="testHandle">宁夏数字大院</text>
<!--  #endif -->

css

.test {
    /*  #ifdef  SHEQU-PLATFORM */
        color: #000000;
    /*  #endif  */
    /*  #ifdef  NXDW-PLATFORM */
        color: #0062CC;
    /*  #endif  */
    /*  #ifdef  NXSZ-PLATFORM */
        color: #00B26A;
    /*  #endif  */
}

js

// 测试
testHandle() {
    // #ifdef SHEQU-PLATFORM
    console.log("社区")
    // #endif
    // #ifdef NXDW-PLATFORM
    console.log("宁夏党委")
    // #endif
    // #ifdef NXSZ-PLATFORM
    console.log("宁夏数字")
    // #endif
    // #ifndef NXDW-PLATFORM || NXSZ-PLATFORM || SHEQU-PLATFORM
    console.log("其他")
    // #endif
},

其他条件编译

pages.json 的条件编译:

// #ifdef SHEQU-PLATFORM
{
    "path": "pages/main/main",
    "style": {
        "navigationBarTitleText": "智慧社区",
        "enablePullDownRefresh": true
    }
},
// #endif

上面的页面,只有运行至SHEQU-PLATFORM 时才会编译进去

{
    ...
}
// #ifdef SHEQU-PLATFORM
,
{
    "root": "shequPackages",
    "pages": [{
        "path": "pages/test",
        "style": {
            "navigationBarTitleText": "test",
            "enablePullDownRefresh": false,
            "navigationBarBackgroundColor": "#ffffff"
        }
    }]
}
// #endif
// #ifdef NXDW-PLATFORM
,
{
    "root": "nxdwPackages",
    "pages": [{
        "path": "pages/test",
        "style": {
            "navigationBarTitleText": "test",
            "enablePullDownRefresh": false,
            "navigationBarBackgroundColor": "#ffffff"
        }
    }]
}
// #endif

注意上面的逗号,不然会出现pages.json编译失败问题

注:不同平台下的特有功能,以及小程序平台的分包,都可以通过 pages.json 的条件编译来更好地实现。这样,就不会在其它平台产生多余的资源,进而减小包体积。

static 目录的条件编译

注:在不同平台,引用的静态资源可能也存在差异,通过 static 的的条件编译可以解决此问题,static 目录下新建不同平台的专有目录(目录名称同 %PLATFORM% 值域,但字母均为小写),专有目录下的静态资源只有在特定平台才会编译进去

整体目录条件编译

注:如果想把各平台的页面文件更彻底的分开,也可以在uni-app项目根目录创建platforms目录,然后在下面进一步创建SHEQU-PLATFORM、NXDW-PLATFORM等子目录,存放不同平台的文件。

来源:https://blog.csdn.net/lj1530562965/article/details/117120146

相关文章

  • uniapp自定义条件编译-定制化产品

    背景 最近有个uniapp小程序产品,产品需要根据不同地区有不同的定制化需求,这边用到的是uniapp的自定义条件...

  • uniapp 中条件编译

  • uniapp-条件编译

    条件编译是用特殊的注释作为标记,在编译时根据这些特殊的注释,将注释里面的代码编译到不同平台。 写法:以 #ifde...

  • uniapp实现条件编译

    条件编译是利用注释实现的,在不同语法里注释写法不一样,js使用 // 注释、css 使用 /* 注释 */、vue...

  • uniapp条件编译使用

    uniapp支持的各个平台对应的值 解析 js中用法 标签中使用 css中使用 json中使用

  • uniapp中自定义条件编译平台总结

    有的时候,我们需要将开发的应用发布到不同的平台,例如同样是发布到H5平台,可能还会再分线上平台、开发平台等等,对于...

  • Module build failed (from ./node

    HbuilderX 开发uniapp项目。 万万没想到,报错是因为//#ifdef 条件编译出了问题,除了//#i...

  • 产品日常二三事

    产品需求分析 定制化软件产品与标准化软件产品的不同指出在于对定制化对象的需求的沟通及理解。众多时候定制化软件产品的...

  • uni-app实战教程《悦读》项目实战前后端全栈

    课程大纲 创建项目、后端环境介绍 封装全局登录检查函数并部署 uniapp app 端微信登录原理、条件编译 部署...

  • 定制化编译ffmpeg

    在之前写过一篇文章编译FFmpeg for Android,简单的讲了一下如何在Linux下编译ffmpeg,今天...

网友评论

      本文标题:uniapp自定义条件编译-定制化产品

      本文链接:https://www.haomeiwen.com/subject/tmqspltx.html