filesbox/miniprogram/FilesBox/node_modules/mp-html/docs/advanced/develop.md
2023-09-21 10:23:31 +08:00

4.5 KiB
Raw Permalink Blame History

二次开发 :id=develop

📣 说明 :id=notice

二次开发请在 src 目录下进行修改,修改完成后可通过下述方法自动生成各平台的代码包
为方便维护,本项目原生包多个平台共用一套源代码,在编写时直接按照微信端的写法进行编写即可,生成代码包 时会自动进行转换
自动转换已经抹平了大部分平台之间的差异(文件后缀名、api 格式等),需要注意的是 访问组件的属性 时,请通过 this.properties 访问而不是 this.data,因为在支付宝平台中两者不互通

个别问题可以自行修改 tools/converter.js 进行处理

附项目结构:

├─dev生成的各平台示例项目
├─dist生成的各平台代码包
│  ├─mp-alipay
│  ├─mp-baidu
│  ├─mp-qq
│  ├─mp-toutiao
│  ├─mp-weixin
│  └─uni-app
├─docs文档由 docsify 生成)
├─plugins插件源代码
├─src组件源代码
│  ├─miniprogram原生包源代码
│  └─uni-appuni-app 包源代码)
├─test测试代码
├─tools构建工具
│   ├─demo示例项目源代码
│   │  ├─miniprogram原生平台示例项目
│   │  └─uni-appuni-app 平台示例项目)
|   ├─config.js构建工具的配置项
|   ├─converter.js将微信端的代码转换到各个平台
|   ├─ifdef.js处理条件编译
|   ├─minifier.js处理 json 和 wxs 的压缩)
|   └─plugin.js处理插件构建
├─.eslintrc.jsoneslint 配置)
├─.stylelintrc.jsonstylelint 配置)
├─gulpfile.jsgulp 生成文件)
├─LICENSE许可证 MIT
└─package.json项目配置

?> 对于较复杂的修改,如果能通过 编写插件 方式实现更推荐插件方式,这样在组件包升级的时候便于维护和管理

🎈 条件编译 :id=ifdef

不同平台之间一些差异的地方可能无法简单的通过替换解决,因此本项目中引入了一种条件编译机制解决平台差异,可在修改时加以利用(条件编译是指在生成包的过程中就仅保留本平台需要的代码,与运行过程中的 if 判断不同)

方式 1(适用于 jswxmlwxss 文件)
仅在某平台下需要使用的代码放在两个注释(各种注释格式皆可)之间即可,示例:

// #ifdef MP-WEIXIN
console.log('这是微信平台')
// #endif
// #ifndef MP-WEIXIN
console.log('这不是微信平台')
// #endif

方式 2(适用于 wxml 文件)
对于仅在某一平台使用的属性,可在属性名前加 平台名: ,示例:

<!-- show-menu-by-longpress 属性将仅被生成到微信包中 -->
<image mp-weixin:show-menu-by-longpress="xxx" />

说明:

  1. 可用的平台名称:mp-weixin, mp-qq, mp-baidu, mp-alipay, mp-toutiao(不区分大小写)
  2. #if(n)def#endif 必须成对出现,否则会报错(可以多层嵌套)
  3. 如果编译过程中发现问题可以自行修改 tools/ifdef.js 进行处理

📦 生成组件包 :id=pack

修改完成后,可按以下步骤生成新的组件包
mp-html 文件夹下执行:

?> 以下命令需要在组件包根目录下执行,即包含 package.json 的目录(如果通过 npm 获取就是 node_modules/mp-html

  1. 安装依赖
    # 通过 npm 安装
    npm install
    # 或通过 yarn 安装
    yarn
    
  2. 生成代码包到 dist 文件夹
    # 生成微信包到 dist/mp-weixin
    npm run build:weixin
    # 生成 qq 包到 dist/mp-qq
    npm run build:qq
    # 生成百度包到 dist/mp-baidu
    npm run build:baidu
    # 生成支付宝包到 dist/mp-alipay
    npm run build:alipay
    # 生成头条包到 dist/mp-toutiao
    npm run build:toutiao
    # 生成 uni-app 包到 dist/uni-app
    npm run build:uni-app
    # 生成所有包
    npm run build
    

?> 如需修改打包过程中的配置(babel, uglifyJs 等),可以对 tools/config.js 进行修改

🔦 检查和测试 :id=test

假设已安装好依赖

npm run lint           # eslint 检查
npm run lintcss        # stylelint 检查
npm run lintcss --fix  # 检查并修复
npm run test           # 执行 jest 测试
npm run coverage       # 测试代码覆盖率

可以向 test 目录下添加新的测试用例进行测试