如何开发第三方小程序组件 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
tower1229
V2EX    分享创造

如何开发第三方小程序组件

  •  
  •   tower1229
    tower1229 2019-07-24 15:56:23 +08:00 2242 次点击
    这是一个创建于 2326 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近开发了一个小程序动态仪表盘组件,并以第三方小程序组件的形式发布到 npm,任意小程序项目都可以安装这个模块,从而获得仪表盘功能。

    组件功能目前还非常简单,先来预览一下效果:

    项目源码及使用介绍可参考项目主页: https://github.com/tower1229/weapp-plugin-dashboard

    开发第三方小程序自定义组件的方法,微信官方文档有一个简单的介绍,我在开发过程中遇到一些坑,在这里记录一下,希望对大家有所帮助。原文地址: https://refined-x.com/2019/07/22/weapp-plugin-dashboard/

    如何开发微信小程序自定义组件

    官方提供了一个 CLI 工具专门用于开发小程序自定义组件,首先全局安装这个工具:

    npm install -g @wechat-miniprogram/miniprogram-cli 

    然后用它初始化一个自定义组件项目:

    miniprogram init --type custom-component 

    这一步会下载一个前端工程模板到本地,这个模板是一个基于 gulp 的前端自动化工程,使用前需要先安装依赖:

    npm i 

    有可能你会像我一样发现这个项目的默认依赖版本有点老,然后习惯性的在 VSCode 里用Npm Dependency自动升级了一下,重新安装,然后就傻逼了,新版 babel 插件会让项目跑不起来。

    还原到默认版本重新安装,启动开发服务:

    npm run watch 

    这时自动化工程会将src/里的代码构建到miniprogram_dev/文件夹,这里面是一个标准的小程序目录结构,是可以用微信开发者工具导入并运行的,导入的时候注意使用测试 appId。

    然后这边我们编辑 src 里的源码文件,另一边就会同步构建到 miniprogram_dev,微信开发者工具检测到文件变动也会自动重新编译项目,目前为止很美好。

    但就我的亲身体验来看,这个自动化工程有点小毛病,偶尔会把个别文件给编译“丢”,比如突然样式没了,或者 js 编译不通过,那么 js 文件也就没了,微信开发者工具这边就会报错。

    最坑的是,这个工程的编译过程集成了 eslint 代码检查,检查不通过 js 文件就不编译,任由开发者工具报错。默认的 eslint 配置是有多变态?起码对我来说这是个很难忘的经历,一下午都在咬牙切齿的查各种 eslint 报错是什么意思,怎么关掉。

    不过 eslint 也有一些有意义的要求,比如parseInt()方法的第二个参数通常我都不传,严格来说这样确实不算好的实践。

    canvas 在小程序组件中的使用

    开发过程中遇到最坑的问题,是我自己看文档不仔细导致的,但我觉得更大的责任在于小程序官方文档太乱了。

    初始化 canvas 实例的wx.createCanvasContext()方法,其实有两个参数,第二个参数通常也是都不传,仅在组件内使用时这个参数才需要传this,之前一直没在组件里用过 canvas,导致忘了还有这么个参数,也不报错,就是 canvas 死活画不出东西,查了好半天才发现是这个原因。

    这种情况完全可以在开发工具中给个报错,为什么不?

    查文档的过程中,真心觉得小程序的文档组织太 TM 乱了,知识点是全的,但同一个东西的知识点散落的到处都是,比如说单独看 [框架] 这个栏目的内容,你根本不可能掌握小程序框架是怎么一回事,再看看“指南”才能知道个大概,然后再看组件和 API,才能写出个 hello world 项目。

    就说自定义组件的开发吧,自定义组件的接口、开发、发布、安装每个环节的内容,被分别散落在 [框架] 、 [指南] 、 [工具] 的不同篇幅里,也就是第一次开发自定义组件的时候,需要把整个文档都翻腾一遍,才能找到所有我需要知道的东西,你说扯不扯。

    发布与安装 npm 包

    自定义组件开发完了就要发布到 npm,发布过程是全程最愉快的部分了,一点坑没有,开发环境测试没问题,运行构建命令:

    npm run build 

    这时会产出一个miniprogram_dist/文件夹,整个项目的.gitignore.npmignore都预置好了,如果你把代码提交到 GitHub,将只提交源码和必要的工程文件;如果要发布到 npm,在已经登录 npm 的前提下只要执行:

    npm publish 

    就会按小程序支持的格式(包含miniprogram_dist/)将代码发布到 npm,然后就可以在其他小程序项目里安装并使用了。

    小程序项目安装 npm 包有点麻烦。

    首先在小程序代码根目录( project.config.json 中 miniprogramRoot 配置的目录)中依次执行:

    npm init npm i weapp-plugin-dashboard -S --production // 此处以安装 weapp-plugin-dashboard 模块为例 

    只有这样安装的模块才算数,一开始我随手创建了个package.json文件写上依赖包名称,然后执行npm i,虽然模块也下载了,但会在下一步的开发者工具中报错,提示找不到 npm 包,可能是因为package.json文件不规范,但是文档没有告知怎样的package.json才算规范。

    安装完毕后,在开发者工具中看不到node_modules/这个目录,因为此时这些模块小程序还并不支持,需要再构建一下才能用。

    首先,在开发者工具的项目配置里开启使用 npm 模块,然后执行“工具-构建 npm ”操作,成功后会产出一个miniprogram_npm/文件夹,这个文件夹是可以在开发者工具中看到的,到这一步 npm 包才算真的安装成功,可以在小程序项目中正常调用了。

    最后

    再放一下项目地址吧,

    https://github.com/tower1229/weapp-plugin-dashboard

    欢迎感兴趣的朋友一起参与开发。

    admc
        1
    admc  
       2019-07-25 09:54:46 +08:00
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1771 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 16:13 PVG 00:13 LAX 08:13 JFK 11:13
    D have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86