开源一个微信小程序仪表盘组件过程解析


Posted in Javascript onJuly 30, 2019

前言

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

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

开源一个微信小程序仪表盘组件过程解析

感兴趣的直接看源码:

https://github.com/tower1229/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

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
实例分析js和C#中使用正则表达式匹配a标签
Nov 26 Javascript
jQuery使用之处理页面元素用法实例
Jan 19 Javascript
JS实现可直接显示网页代码运行效果的HTML代码预览功能实例
Aug 06 Javascript
JavaScript实现定时隐藏与显示图片的方法
Aug 06 Javascript
JQuery 两种方法解决刚创建的元素遍历不到的问题
Apr 13 Javascript
微信小程序  modal详解及实例代码
Nov 09 Javascript
jQuery EasyUI之验证框validatebox实例详解
Apr 10 jQuery
vue 计时器组件的实现代码
Sep 14 Javascript
webpack vue 项目打包生成的文件,资源文件报404问题的修复方法(总结篇)
Jan 09 Javascript
一文快速了解JQuery中的AJAX
May 31 jQuery
vue子组件改变父组件传递的prop值通过sync实现数据双向绑定(DEMO)
Feb 01 Javascript
JS字符串和数组如何实现相互转化
Jul 02 Javascript
原生js添加一个或多个类名的方法分析
Jul 30 #Javascript
vue2.0项目集成Cesium的实现方法
Jul 30 #Javascript
Koa从零搭建到Api实现项目的搭建方法
Jul 30 #Javascript
js实现的格式化数字和金额功能简单示例
Jul 30 #Javascript
JS实现点击发送验证码 xx秒后重新发送功能
Jul 30 #Javascript
微信小程序渲染性能调优小结
Jul 30 #Javascript
vue通过video.js解决m3u8视频播放格式的方法
Jul 30 #Javascript
You might like
ninety plus是什么?ninety plus咖啡好吗?
2021/03/04 新手入门
PHP中date()日期函数有关参数整理
2011/07/19 PHP
PHP5.4中json_encode中文转码的变化小结
2013/01/30 PHP
JSON用法之将PHP数组转JS数组,JS如何接收PHP数组
2015/10/08 PHP
原生php实现excel文件读写的方法分析
2018/04/25 PHP
PHP filter_var() 函数, 验证判断EMAIL,URL等
2021/03/09 PHP
一个选择最快的服务器转向代码
2009/04/27 Javascript
Domino中运用jQuery读取视图内容的方法
2009/10/21 Javascript
dojo学习第一天 Tab选项卡 实现
2011/08/28 Javascript
JQuery中关于jquery.js与jquery.min.js的比较探讨
2013/05/15 Javascript
Javascript this 关键字 详解
2014/10/22 Javascript
20个实用的JavaScript技巧分享
2014/11/28 Javascript
基于jquery实现表格无刷新分页
2016/01/07 Javascript
Angularjs自定义指令Directive详解
2017/05/27 Javascript
iview中Select 选择器多选校验方法
2018/03/15 Javascript
vue中使用iview自定义验证关键词输入框问题及解决方法
2018/03/26 Javascript
浅谈vue中.vue文件解析流程
2018/04/24 Javascript
基于ionic实现下拉刷新功能
2018/05/10 Javascript
详解Vue.js和layui日期控件冲突问题解决办法
2019/07/25 Javascript
vue点击标签切换选中及互相排斥操作
2020/07/17 Javascript
jquery实现加载更多"转圈圈"效果(示例代码)
2020/11/09 jQuery
python实现字符串和日期相互转换的方法
2015/05/13 Python
python re模块的高级用法详解
2018/06/06 Python
python实现向微信用户发送每日一句 python实现微信聊天机器人
2019/03/27 Python
PyCharm 创建指定版本的 Django(超详图解教程)
2019/06/18 Python
python-tornado的接口用swagger进行包装的实例
2019/08/29 Python
Python利用全连接神经网络求解MNIST问题详解
2020/01/14 Python
python 的topk算法实例
2020/04/02 Python
python+pygame实现坦克大战小游戏的示例代码(可以自定义子弹速度)
2020/08/11 Python
利用Python实现朋友圈中的九宫格图片效果
2020/09/03 Python
高校毕业生登记表自我鉴定
2013/11/03 职场文书
入党积极分子学习党的纲领思想汇报
2014/09/13 职场文书
毕业生银行实习自我鉴定
2014/10/14 职场文书
地球上的星星观后感
2015/06/02 职场文书
隐形的翅膀观后感
2015/06/10 职场文书
你有一份《诚信考试承诺书》待领取
2019/11/13 职场文书