開源一個(gè)微信小程序儀表盤組件過程解析
前言
最近開發(fā)了一個(gè)小程序動(dòng)態(tài)儀表盤組件,并以第三方小程序組件的形式發(fā)布到npm,任意小程序項(xiàng)目都可以安裝這個(gè)模塊,從而獲得儀表盤功能。
組件功能目前還非常簡(jiǎn)單,先來預(yù)覽一下效果:
感興趣的直接看源碼:
https://github.com/tower1229/weapp-plugin-dashboard
下面是踩坑過程。
如何開發(fā)微信小程序自定義組件
官方提供了一個(gè)CLI工具專門用于開發(fā)小程序自定義組件,首先全局安裝這個(gè)工具:
npm install -g @wechat-miniprogram/miniprogram-cli
然后用它初始化一個(gè)自定義組件項(xiàng)目:
miniprogram init --type custom-component
這一步會(huì)下載一個(gè)前端工程模板到本地,這個(gè)模板是一個(gè)基于gulp的前端自動(dòng)化工程,使用前需要先安裝依賴:
npm i
有可能你會(huì)像我一樣發(fā)現(xiàn)這個(gè)項(xiàng)目的默認(rèn)依賴版本有點(diǎn)老,然后習(xí)慣性的在VSCode里用Npm Dependency自動(dòng)升級(jí)了一下,重新安裝,然后就傻逼了,新版babel插件會(huì)讓項(xiàng)目跑不起來。
還原到默認(rèn)版本重新安裝,啟動(dòng)開發(fā)服務(wù):
npm run watch
這時(shí)自動(dòng)化工程會(huì)將src/里的代碼構(gòu)建到miniprogram_dev/文件夾,這里面是一個(gè)標(biāo)準(zhǔn)的小程序目錄結(jié)構(gòu),是可以用微信開發(fā)者工具導(dǎo)入并運(yùn)行的,導(dǎo)入的時(shí)候注意使用測(cè)試appId。
然后這邊我們編輯src里的源碼文件,另一邊就會(huì)同步構(gòu)建到miniprogram_dev,微信開發(fā)者工具檢測(cè)到文件變動(dòng)也會(huì)自動(dòng)重新編譯項(xiàng)目,目前為止很美好。
但就我的親身體驗(yàn)來看,這個(gè)自動(dòng)化工程有點(diǎn)小毛病,偶爾會(huì)把個(gè)別文件給編譯“丟”,比如突然樣式?jīng)]了,或者js編譯不通過,那么js文件也就沒了,微信開發(fā)者工具這邊就會(huì)報(bào)錯(cuò)。
最坑的是,這個(gè)工程的編譯過程集成了eslint代碼檢查,檢查不通過js文件就不編譯,任由開發(fā)者工具報(bào)錯(cuò)。默認(rèn)的eslint配置是有多變態(tài)?起碼對(duì)我來說這是個(gè)很難忘的經(jīng)歷,一下午都在咬牙切齒的查各種eslint報(bào)錯(cuò)是什么意思,怎么關(guān)掉。
不過eslint也有一些有意義的要求,比如parseInt()方法的第二個(gè)參數(shù)通常我都不傳,嚴(yán)格來說這樣確實(shí)不算好的實(shí)踐。
canvas在小程序組件中的使用
開發(fā)過程中遇到最坑的問題,是我自己看文檔不仔細(xì)導(dǎo)致的,但我覺得更大的責(zé)任在于小程序官方文檔太亂了。
初始化canvas實(shí)例的wx.createCanvasContext()方法,其實(shí)有兩個(gè)參數(shù),第二個(gè)參數(shù)通常也是都不傳,僅在組件內(nèi)使用時(shí)這個(gè)參數(shù)才需要傳this,之前一直沒在組件里用過canvas,導(dǎo)致忘了還有這么個(gè)參數(shù),也不報(bào)錯(cuò),就是canvas死活畫不出東西,查了好半天才發(fā)現(xiàn)是這個(gè)原因。
這種情況完全可以在開發(fā)工具中給個(gè)報(bào)錯(cuò),為什么不?
查文檔的過程中,真心覺得小程序的文檔組織太TM亂了,知識(shí)點(diǎn)是全的,但同一個(gè)東西的知識(shí)點(diǎn)散落的到處都是,比如說單獨(dú)看【框架】這個(gè)欄目的內(nèi)容,你根本不可能掌握小程序框架是怎么一回事,再看看“指南”才能知道個(gè)大概,然后再看組件和API,才能寫出個(gè)hello world項(xiàng)目。
就說自定義組件的開發(fā)吧,自定義組件的接口、開發(fā)、發(fā)布、安裝每個(gè)環(huán)節(jié)的內(nèi)容,被分別散落在【框架】、【指南】、【工具】的不同篇幅里,也就是第一次開發(fā)自定義組件的時(shí)候,需要把整個(gè)文檔都翻騰一遍,才能找到所有我需要知道的東西,你說扯不扯。
發(fā)布與安裝npm包
自定義組件開發(fā)完了就要發(fā)布到npm,發(fā)布過程是全程最愉快的部分了,一點(diǎn)坑沒有,開發(fā)環(huán)境測(cè)試沒問題,運(yùn)行構(gòu)建命令:
npm run build
這時(shí)會(huì)產(chǎn)出一個(gè)miniprogram_dist/文件夾,整個(gè)項(xiàng)目的.gitignore和.npmignore都預(yù)置好了,如果你把代碼提交到GitHub,將只提交源碼和必要的工程文件;如果要發(fā)布到npm,在已經(jīng)登錄npm的前提下只要執(zhí)行:
npm publish
就會(huì)按小程序支持的格式(包含miniprogram_dist/)將代碼發(fā)布到npm,然后就可以在其他小程序項(xiàng)目里安裝并使用了。
小程序項(xiàng)目安裝npm包有點(diǎn)麻煩。
首先在小程序代碼根目錄(project.config.json中miniprogramRoot配置的目錄)中依次執(zhí)行:
npm init npm i weapp-plugin-dashboard -S --production // 此處以安裝weapp-plugin-dashboard模塊為例
只有這樣安裝的模塊才算數(shù),一開始我隨手創(chuàng)建了個(gè)package.json文件寫上依賴包名稱,然后執(zhí)行npm i,雖然模塊也下載了,但會(huì)在下一步的開發(fā)者工具中報(bào)錯(cuò),提示找不到npm包,可能是因?yàn)閜ackage.json文件不規(guī)范,但是文檔沒有告知怎樣的package.json才算規(guī)范。
安裝完畢后,在開發(fā)者工具中看不到node_modules/這個(gè)目錄,因?yàn)榇藭r(shí)這些模塊小程序還并不支持,需要再構(gòu)建一下才能用。
首先,在開發(fā)者工具的項(xiàng)目配置里開啟使用npm模塊,然后執(zhí)行“工具-構(gòu)建npm”操作,成功后會(huì)產(chǎn)出一個(gè)miniprogram_npm/文件夾,這個(gè)文件夾是可以在開發(fā)者工具中看到的,到這一步npm包才算真的安裝成功,可以在小程序項(xiàng)目中正常調(diào)用了。
最后
再放一下項(xiàng)目地址吧,
https://github.com/tower1229/weapp-plugin-dashboard
歡迎感興趣的朋友一起參與開發(fā)。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JavaScript實(shí)現(xiàn)斗地主游戲的思路
這篇文章主要介紹了JavaScript實(shí)現(xiàn)斗地主游戲的思路的相關(guān)資料,需要的朋友可以參考下2016-02-02BootstrapTable refresh 方法使用實(shí)例簡(jiǎn)單介紹
本文就bootstrapTable refresh 方法如何傳遞參數(shù)做簡(jiǎn)單舉例說明,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2017-02-02js中文逗號(hào)轉(zhuǎn)英文實(shí)現(xiàn)
中文逗號(hào)如何轉(zhuǎn)英文,下面為大家詳細(xì)介紹下,感興趣的朋友不要錯(cuò)過2014-02-02禁用頁面部分JavaScript方法的具體實(shí)現(xiàn)
方法重寫,重寫要禁用的方法,并讓它什么也不做,結(jié)果證明真的可行,但并不知道是不是一個(gè)科學(xué)的方法,我拿出來與大家共同討論一下2013-07-07