小程序?qū)嵱脭U(kuò)展工具類(lèi)庫(kù)總結(jié)

介紹一些小程序的擴(kuò)展的工具類(lèi)庫(kù)彤侍。

目錄:

1、瘦身工具

通過(guò)剔除無(wú)用文件逆趋、壓縮圖片盏阶、復(fù)用代碼等方式減少小程序代碼包體積。

1.1 安裝

  npm install -g miniprogram-slim

1.2 使用

  Usage: miniprogram-slim <command>

  Options:
    -v, --version                  output the version number
    -h, --help                     output usage information

  Commands:
    //分析miniprogram的依賴(lài)關(guān)系闻书,找出未使用的文件
    analyzer [options]             Analyze dependencies of miniprogram, find out unused files

    //檢測(cè)源代碼中的重復(fù)
    cpd [options] <dir>            Detect duplications in source code 

    //將圖像轉(zhuǎn)換為css精靈
    sprite [options] <input...>    Covert images into css sprites 

    //無(wú)縫縮小圖像
    imagemin [options] <input...>  Minify images seamlessly 



  Examples:
    $ miniprogram-slim analyzer -t
    $ miniprogram-slim cpd src
    $ miniprogram-slim imagemin images/**/*.png
    $ miniprogram-slim sprite -f emoji images/**/*.png

1.2.1 依賴(lài)分析名斟,查找無(wú)用文件( analyzer [options] )

對(duì)小程序的頁(yè)面和組件進(jìn)行依賴(lài)分析,找出未被引用的文件魄眉,生成packOptions項(xiàng)砰盐,在開(kāi)發(fā)者工具上傳代碼時(shí)忽略無(wú)用文件。

支持小程序/插件坑律,僅對(duì) wxml岩梳、wxss、wxs、js冀值、json 以及組件進(jìn)行分析也物,不包括組件內(nèi)的圖片等資源。

需要注意的是列疗,js 文件的依賴(lài)滑蚯,支持 import 和 require 導(dǎo)入的模塊,但運(yùn)行時(shí)計(jì)算的路徑如 require(a + b) 將無(wú)法識(shí)別抵栈。

用法:

Usage: miniprogram-slim analyzer [options]

Analyze dependencies of miniprogram, find out unused files

Options:
  //輸出[dir]結(jié)果的目錄路徑(默認(rèn)值:“./analyzer”)
  -o, --output [dir]   path to directory for result (default: "./analyzer")

  //忽略應(yīng)該從未使用的文件中排除的文件的glob模式
  -i, --ignore <glob>  glob pattern for files what should be excluded from unused files

  //寫(xiě)覆蓋舊project.config.json項(xiàng)目
  -w, --write          overwrite old project.config.json

  //表打印微型程序文件大小數(shù)據(jù)
  -t, --table          print miniprogram file size data

  //幫助輸出使用信息
  -h, --help           output usage information

  //進(jìn)入包含 project.config.json 的項(xiàng)目根目錄告材,執(zhí)行 miniprogram-slim analyzer,默認(rèn)會(huì)生成 ./analyzer/result.json 文件古劲,記錄生成的數(shù)據(jù)結(jié)果斥赋。
  {
    //字段記錄著在開(kāi)發(fā)者工具打包上傳時(shí)可以被忽略的文件,拷貝該部分至 project.config.json 即可绢慢,執(zhí)行 miniprogram-slim analyzer -w 將自動(dòng)進(jìn)行同步灿渴。
    "packOptions": {
      "ignore": []
    },
    //字段記錄著文件間的依賴(lài)關(guān)系,按頁(yè)面維護(hù)分割胰舆,包括與頁(yè)面相關(guān)的 wxml骚露、wxss、js缚窿、wxs 以及組件的引用棘幸。
    "dependencies": {
      "app": {
        "esDeps": [],
        "wxmlDeps": [],
        "wxssDeps": [],
        "compDeps": [],
        "wxsDeps": [],
        "jsonDeps": [],
        "files": []
      },
      "pages": {},
      "subpackages": {}
    },
    //為未引用的文件數(shù)組
    "unusedFiles": [],
    //為保持依賴(lài)關(guān)系的文件大小的集合,test/minicode 項(xiàng)目測(cè)試部分結(jié)果如下倦零,其中后綴為 .json 的表示一個(gè)組件
    "data": {}
  }

1.2.2 代碼相似度比較 ( cpd [options] )

對(duì) jscpd 模塊的簡(jiǎn)單封裝误续,默認(rèn)會(huì)在執(zhí)行的目錄下生成一份 .jscpd.json 配置文件,report 目錄保存生成的代碼對(duì)比報(bào)告扫茅。

用法

sage: miniprogram-slim cpd [options] <dir>

Detect duplications in source code

Options:
  //配置[文件]配置文件的路徑
  -c, --config [file]  path to config file (default: ".jscpd.json")  

  // 輸出[dir]報(bào)告的目錄路徑(默認(rèn)值:“./report/”)
  -o, --output [dir]   path to directory for reports (default: "./report/")

  //忽略應(yīng)該從重復(fù)檢測(cè)中排除的文件的glob模式
  -i, --ignore <glob>  glob pattern for files what should be excluded from duplication detection  

  //幫助輸出使用信息
  -h, --help           output usage information 

1.2.3 圖片壓縮 ( imagemin [options] )

對(duì) imagemin 模塊的簡(jiǎn)單封裝蹋嵌。

用法

// miniprogram-slim imagemin -h
Usage: miniprogram-slim imagemin [options] <input...>

Minify images seamlessly

Options:
  //輸出目錄
  -o, --output <dir>      output directory 

  //指示pngquant使用最少的顏色(默認(rèn)值為:“0.65分,0.8分")
  --png-quality <string>  instructs pngquant to use the least amount of colors (default: "0.65,0.8") 

  // 無(wú)漸進(jìn)式創(chuàng)建基準(zhǔn)JPEG文件
  --no-progressive        creates baseline JPEG file

  //幫助輸出使用信息
  -h, --help              output usage information 

1.2.4 生成雪碧圖代碼 (sprite -f emoji images/*/.png)

對(duì) spritesmith 模塊的簡(jiǎn)單封裝,能夠自動(dòng)生成雪碧圖和對(duì)應(yīng)的 css 代碼葫隙。

用法

// miniprogram-slim sprite -h
Usage: miniprogram-slim sprite [options] <input...>

Covert images into css sprites

Options:
  //輸出[目錄](méi)輸出目錄(默認(rèn)值:“../”)
  -o, --output [dir]       output directory (default: "./")

  //filename[string]spritesheet的文件名(默認(rèn)值:“sprite”)
  -f, --filename [string]  filename of spritesheet (default: "sprite")

  // --要在圖像之間使用的填充[數(shù)字]填充(默認(rèn)值:2)
  -p, --padding [number]   padding to use between images (default: 2)

  //幫助輸出使用信息
  -h, --help               output usage information

2栽烂、微信小程序定義文件

微信小程序 API 的 TypeScript 類(lèi)型定義文件

1.1 安裝

  # 安裝對(duì)應(yīng)最新基礎(chǔ)庫(kù)的定義文件
  npm install miniprogram-api-typings

  or

  # 安裝對(duì)應(yīng)基礎(chǔ)庫(kù)版本 2.4.1 的定義文件
  npm install miniprogram-api-typings@2.4.1

3、擴(kuò)展微信小程序api支持promise

微信小程序 API 的 TypeScript 類(lèi)型定義文件

1.1 安裝

  npm install --save miniprogram-api-promise

1.2 使用

在小程序入口(app.js)調(diào)用一次promisifyAll恋脚,只需要調(diào)用一次腺办。

  示例:
  import { promisifyAll, promisify } from 'miniprogram-api-promise';

  const wxp = {}
  // promisify all wx's api
  promisifyAll(wx, wxp)
  console.log(wxp.getSystemInfoSync())
  wxp.getSystemInfo().then(console.log)
  wxp.showModal().then(wxp.openSetting())

  // compatible usage
  wxp.getSystemInfo({success(res) {console.log(res)}})

  // promisify single api
  promisify(wx.getSystemInfo)().then(console.log)

4、threejs-miniprogram

Three.js 小程序 WebGL 的適配版本

WebGL(Web圖形庫(kù))是一個(gè)JavaScript API糟描,可在任何兼容的Web瀏覽器中渲染高性能的交互式3D和2D圖形怀喉,而無(wú)需使用插件。該API可以在HTML5 canvas元素中使用船响。 這種一致性使API可以利用用戶(hù)設(shè)備提供的硬件圖形加速

1.1 安裝

  //例子可參考: https://github.com/wechat-miniprogram/threejs-miniprogram/tree/master/example

  //1躬拢、通過(guò) npm 安裝  =》 安裝完成之后在微信開(kāi)發(fā)者工具中點(diǎn)擊構(gòu)建 npm躲履。
  npm install --save threejs-miniprogram

  //2、導(dǎo)入小程序適配版本的 Three.js
  import {createScopedThreejs} from 'threejs-miniprogram'

  Page({
    onReady() {
      wx.createSelectorQuery()
        .select('#webgl')
        .node()
        .exec((res) => {
          const canvas = res[0].node
          // 創(chuàng)建一個(gè)與 canvas 綁定的 three.js
          const THREE = createScopedThreejs(canvas)
          // 傳遞并使用 THREE 變量
        })
    }
  })
  

說(shuō)明

  • 本項(xiàng)目當(dāng)前使用的 Three.js 版本號(hào)為 0.108.0估灿,如要更新 threejs 版本可發(fā) PR 修改或 fork 后自行修改崇呵。
  • 該適配版本的 THREE 不在全局環(huán)境中,如使用 Three.js 的其他配套類(lèi)庫(kù)馅袁,需要自行傳入 THREE 到類(lèi)庫(kù)中域慷。

5、lottie-miniprogram

lottie 動(dòng)畫(huà)庫(kù)適配小程序的版本

Lottie是一個(gè)用于Android汗销,iOS犹褒,Web和Windows的庫(kù),用于解析使用Bodymovin導(dǎo)出為json的Adobe After Effects動(dòng)畫(huà)弛针,并在移動(dòng)設(shè)備和網(wǎng)絡(luò)上呈現(xiàn)它們

1.1 安裝

  //可參考該代碼片段:https://developers.weixin.qq.com/s/2TYvm9mJ75bF
  
  //1叠骑、通過(guò) npm 安裝  =》 安裝完成之后在微信開(kāi)發(fā)者工具中點(diǎn)擊構(gòu)建 npm。
  npm install --save lottie-miniprogram

  //2削茁、傳入 canvas 對(duì)象用于適配
  <canvas id="canvas" type="2d"></canvas>


  import lottie from 'lottie-miniprogram'
  Page({
    onReady() {
      wx.createSelectorQuery().select('#canvas').node(res => {
        const canvas = res.node
        lottie.setup(canvas)
      }).exec()
    }
  })

  //3宙枷、使用 lottie 接口
  lottie.setup(canvas)
  lottie.loadAnimation({
    ...
  })
  

1.2 接口

目前提供兩個(gè)接口:

  • lottie.setup(canvas)

需要在任何 lottie 接口調(diào)用之前調(diào)用,傳入 canvas 對(duì)象

  • lottie.loadAnimation(options)

與原來(lái)的 loadAnimation 有些不同茧跋,支持的參數(shù)有:

  • loop
  • autoplay
  • animationData
  • path (只支持網(wǎng)絡(luò)地址)
  • rendererSettings.context (必填)

說(shuō)明

  • 本項(xiàng)目是以 npm 的方式依賴(lài)原 lottie-web 項(xiàng)目慰丛,若原項(xiàng)目有新版本,可直接改變依賴(lài)的版本號(hào)瘾杭。
  • 本項(xiàng)目依賴(lài)小程序基礎(chǔ)庫(kù) 2.8.0 里性能更好的 canvas 實(shí)現(xiàn)诅病,由于還有些小問(wèn)題沒(méi)有正式開(kāi)放,但目前用在此處暫無(wú)發(fā)現(xiàn)問(wèn)題粥烁。
  • 由于小程序本身不支持動(dòng)態(tài)執(zhí)行腳本贤笆,因此 lottie 的 expression 功能也是不支持的。

6讨阻、參考文檔

原文地址:https://yolkpie.net/2020/12/13/%E5%B0%8F%E7%A8%8B%E5%BA%8F%E5%AE%9E%E7%94%A8%E6%89%A9%E5%B1%95%E5%B7%A5%E5%85%B7%E7%B1%BB%E5%BA%93%E6%80%BB%E7%BB%93/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末芥永,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子钝吮,更是在濱河造成了極大的恐慌恤左,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件搀绣,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡戳气,警方通過(guò)查閱死者的電腦和手機(jī)链患,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)瓶您,“玉大人麻捻,你說(shuō)我怎么就攤上這事纲仍。” “怎么了贸毕?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵郑叠,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我明棍,道長(zhǎng)乡革,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任摊腋,我火速辦了婚禮沸版,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘兴蒸。我一直安慰自己视粮,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布橙凳。 她就那樣靜靜地躺著蕾殴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪岛啸。 梳的紋絲不亂的頭發(fā)上钓觉,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音值戳,去河邊找鬼议谷。 笑死,一個(gè)胖子當(dāng)著我的面吹牛堕虹,可吹牛的內(nèi)容都是我干的卧晓。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼赴捞,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼逼裆!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起赦政,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤胜宇,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后恢着,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體桐愉,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年掰派,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了从诲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡靡羡,死狀恐怖系洛,靈堂內(nèi)的尸體忽然破棺而出俊性,到底是詐尸還是另有隱情,我是刑警寧澤描扯,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布定页,位于F島的核電站,受9級(jí)特大地震影響绽诚,放射性物質(zhì)發(fā)生泄漏典徊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一憔购、第九天 我趴在偏房一處隱蔽的房頂上張望宫峦。 院中可真熱鬧,春花似錦玫鸟、人聲如沸导绷。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)妥曲。三九已至,卻和暖如春钦购,著一層夾襖步出監(jiān)牢的瞬間檐盟,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工押桃, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留葵萎,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓唱凯,卻偏偏與公主長(zhǎng)得像羡忘,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子磕昼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容