Echarts在Taro微信小程序開發中的踩坑記錄

2020-12-14 酷扯兒

本文轉載自【微信公眾號:前端人,ID:FrontendPeople】經微信公眾號授權轉載,如需轉載與原文作者聯繫

背景

近期筆者在使用Taro進行微信小程序開發,當引入Echarts圖表庫時,微信檢測單包超限2M的一系列優化措施的踩坑記錄,期望能指導讀者少走一些彎路。

為什麼選擇Echarts?

微信小程序目錄市面上使用最多的兩款圖表庫,如下:

echarts-for-weixin——echarts微信小程序版本wx-charts——基於微信小程序的圖表庫對比兩款圖表庫優缺點剛好相反。

echarts-for-weixin:功能強大,但體積非常大wx-charts:功能相對簡單,但體積小由於筆者對echarts使用較熟悉,且需求圖表需要支持的部分功能wx-charts不支持,所以最終選擇使用echarts-for-weixin,踩坑之旅就此開始。

單包超過2M,如何處理?

筆者引入echarts-for-weixin,快樂的做完需求,準備上傳代碼發布微信小程序體驗版,坑就此開始...

當單包超過2M上限,則上傳代碼出現異常,出現上面彈窗提示。

微信小程序官方要求,單包不超過2M,整包不超過16M

遇到單包超過2M,優化方案有如下兩種:

微信分包加載subpackages單包體積優化(縮減代碼、壓縮、靜態資源CDN等等)由於筆者本次開發需求屬於新功能,所以把新功能模塊採用獨立的分包路由加載,但分包後,還是出現單包超過2M的限制。

經過分析發現業務模塊引用的echarts組件,會被Taro打包到common.js模塊,導致所有的分包模塊都會重複計算echarts的size,導致舊分包模塊超過2M的限制。

為什麼echarts-for-weixin會被打包到common.js模塊?

原因是echarts被echarts-for-weixin組件和外部業務組件所依賴,導致Taro認為echarts.js被多個模塊所依賴,所以打包到common.js。

為了解決此問題,採用

splitChunks

打包配置,將

echarts

單獨模塊打包,然後在對應的依賴頁面(

addChunkPages

)注入依賴,配置如下:

// echartChunkName echarts打包後的輸出路徑mini: { webpackChain(chain) { chain.merge({ optimization: { splitChunks: { cacheGroups: { [echartChunkName]: { name: echartChunkName, priority: 50, test(module) { return /subpackages[\\/]homeworkPage[\\/]studyData[\\/]ChartLine[\\/]ec-canvas[\\/]echarts.js/.test( module.resource ); }, }, }, }, }, }); }, addChunkPages(pages, pagesNames) { pages.set("subpackages/homeworkPage/studyData/ChartLine/index", [echartChunkName]); pages.set("subpackages/homeworkPage/studyData/ChartLine/ec-canvas/ec-canvas", [echartChunkName]); } }

Taro通過mini.webpackChain自定義webpack配置,請參考官網文檔webpack分包配置splitChunks,請參考官網文檔通過mini.addChunkPages設置分包依賴,請參考官網文檔經過以上處理,common.js體積恢復正常,以為就此結束。結果新的坑又出現了......如下圖:

echarts-for-weixin組件找不到echarts模塊依賴...

經過一系列的分析,發現Taro對原生微信組件splitChunks分包打包的依賴注入有問題官方還沒有修復此問題...

需要在Taro編譯成功後,手動修改編譯後的ec-canvas.js,注入echarts依賴

如下圖:

經過上面的處理,終於正常運行,單包超過2M的問題也全部解決。

以為到此就結束了?

筆者總不能在每次編譯後,手動修改編譯後的文件吧,如果哪天發版本忘記手動修改,將導致線上問題,風險高。

因此需要寫一個Taro打包hack插件,自動注入編譯後的echarts依賴代碼。

書寫Taro編譯插件很簡單,請參考官方文檔即可,插件代碼如下:

const fs = require('fs');const path = require('path');module.exports.default = module.exports = (ctx, options) => {ctx.onBuildFinish(() => { console.log('echarts構建hack注入') const target = path.join(ctx.paths.outputPath, 'subpackages/homeworkPage/studyData/ChartLine/ec-canvas//ec-canvas.js'); const data = fs.readFileSync(target, 'utf8'); fs.writeFileSync(target, `require("../../echartCommon");${data}`) })}

註:Taro版本2.2以上才支持自定義插件

最後

Echarts在Taro微信小程序開發踩坑記錄到此接近尾聲,希望能給正準備在Taro微信小程序使用echarts圖表庫的讀者一些幫助。

相關焦點

  • 如何構建taro框架並編譯微信小程序項目
    技術taro微信小程序1、在指定文件夾下,打開Git命令窗口切換項目到根目錄,然後安裝依賴包5、編譯成微信小程序,使用命令:npm run dev:weapp編譯成微信小程序,使用命令:npm run6、打開HBuilderX開發工具,導入項目
  • Taro 3 支持 React Native
    廣義上理解,針對小程序各端的處理也基本類似,只不過中間多了一步:先編譯成目標平臺的代碼,然後再用小程序 IDE 編譯發布。當然它與前兩者還是有些差異:目標平臺的中間代碼包含 Taro 運行時,調試起來並不是非常直觀;而前兩者直接生成最終打包資源,所以天然地支持 source-map 。
  • 微信小程序如何做好「授權」設計?
    在本文中,作者結合案例,盤點了微信小程序授權登錄設計中需要注意的幾點問題,並對功能設計背後的設計思路與原理進行了簡要的分析,供大家一同參考學習。經歷了四個小程序從0-1的設計/研發/上線的生命周期,深感小程序由於微信生態圈的影響,使它擁有很多便捷的封裝功能,支持直接調用;同時弊端就是導致很多功能受限,不像原生app那樣靈活多變。
  • Taro小程序、H5、快應用列表大量數據卡頓?
    工作中經常遇到各種列表,如果數據量過大的時候經常會碰到卡頓卡死等性能問題。如果你也遇到類似的問題,小編帶你如何解決。廢話不多說,我們直接上乾貨。1、代碼import React, { Component } from 'react'import { View, Text } from '@tarojs/components'import
  • 微信小程序開發中如何實現組件的動畫效果
    圖1 效果圖1.微信小程序開發中獲取動畫實例微信小程序官方文檔中給出,獲取組件的動畫實例只需要調用函數Animation wx.createAnimation(Object object),最後通過動畫實例的 export 方法導出動畫數據傳遞給組件的 animation 屬性(一會再給出案例),其中參數Object object可以選以下參數:參數中的timingFunction表示動畫效果
  • 微信小程序開發好之後如何推廣,西安手機小程序軟體開發公司
    現在不少的商家都開發了自己的微信小程序,原因其實很簡單那就是小程序可以實現很多的功能,而且開發價格也不是很貴,也有人說小程序就是一個弱化版的app,可以像app一樣使用但是開發的成本相對比較低,現在做小程序開發的公司非常的多,很多企業也都開發了小程序,那麼小程序開發好之後如何推廣呢
  • 鄭州小程序開發一個多少錢?微信小程序怎麼做?
    相信很多在鄭州創業的老闆們,很多都想做一個小程序,畢竟現在比較流行,也能為自己的企業創造一些流量,但是很多朋友又不知道在鄭州做一個小程序到底需要多少錢,跟不知道微信小程序怎麼做!所以小編今天就來給給各位大佬詳細介紹一下!
  • 寵物小程序如何運營,西安微信小程序開發公司
    根據相關數據表明,如今的年輕人養寵物的越來越多,說是養寵物實際很多人已經把寵物當成了一名「家庭成員」自從寵物行業火爆以來,寵物相關的周邊產品也在與日俱增,比如寵物食糧、寵物用品、寵物醫療、美容等相關等相關產品,而有了微信小程序之後,不僅滿足了年輕消費者的網際網路使用習慣,也完成了商家流量和利潤雙重提升
  • 昆明微信小程序開發應該怎麼做
    昆明微信小程序開發怎麼做更好,有以下幾方面的內容,大家可以參考了看一下,希望能夠幫助到大家首先是開發方向,大家可以針對自己的產品做自營商城,還可以做多商戶商城,也就是做本地商圈服務,最後就是還有本地自媒體同城信息發布系統,還有就是知識付費系統
  • 微信小程序招商加盟如何開發市場實現盈利?找準亮點讓利潤翻番!
    8年前的微博營銷,5年前的微信公眾號,3年前的微信支付寶支付,你是否在想如果當時抓住了商機現在是怎樣?現在,新一輪的網際網路商機已經到來,抓住微信小程序這一紅海,深入了解小程序製作平臺的招商加盟政策,學會小程序招商代理如何開發市場實現盈利,這就是2018年利潤翻番的機遇!微信小程序是什麼?
  • 不同種類的微信小程序開發教程及費用科普!
    微信小程序如今已經非常常見,滲透到了我們日常生活的方方面面,包括生活服務、出行、點餐、電商購物、企業展示……商家可以開發適合自己行業的小程序,以吸引線上用戶,同時提高自身服務運營效率。不過這些不同種類的小程序各自該怎麼製作呢?
  • 手邊門店:做一個微信小程序需要多少錢?小程序開發價格
    做一個小程序要多少錢?這是很多人做小程序時,都有的疑問,但很難給出一個標準的報價,因為要根據需要的功能,來算出所投入的成本,然後再確定。一般來說,根據功能的不同,我們可以把小程序分為以下幾種類型:第一種,O2O服務小程序,以餐廳餐館為例,過來消費的顧客,只需要掃二維碼,就能接入小程序,馬上就看到菜單,從而點菜購物,不僅如此,消費過後還能留存用戶的信息,能夠了解用戶的消費習慣偏好,來精準的推送各種優惠,推薦等。
  • 微信小程序開發《影視小程序》從0實戰-無需懂代碼
    最近圈子裡很火爆的就是微信小程序了···不知道大家是否有注意,影視類一直是比較容易獲得認可的資源種類。今天免費分享怎麼從0開始搭建所有資原始碼請在GZH「副業研習圈」獲取需要準備的東西:1、伺服器2、備案域名3、註冊微信小程序
  • 南京開發小程序費用是多少?微信小程序開發流程以及需要什麼資質
    最近有很多南京的朋友向我諮詢關於小程序的問題,想知道在南京哪家小程序製作公司比較好。我覺得在選擇公司之前,還是要對小程序整個製作過程有所了解一些。不得不說,如今是小程序的嶄新時代,哪個行業基本都用得上微信小程序,它能給行業引進一定的客流量和工作機會。
  • 煙臺小程序開發—怎樣用微信小程序來管理用戶信息?
    微信小程序現在對於很多用戶來說都是不陌生的,已經越來越的用戶習慣使用小程序因為小程序的方便快捷導致很多各行各業的商家也開發的小程序並且也應用其中給自身帶來更大的利潤上升空間。同時對於商家而言用戶是很多商家的驅動力與原動力。
  • 濮陽微信小程序開發_安陽市七彩祥雲軟體開發有限責任公司
    濮陽微信小程序開發,安陽市七彩祥雲軟體開發有限責任公司,公司主要服務於中小企業,提供行業定製軟體開發,網站策劃、網站設計製作建設、網站推廣營銷、微信營銷、APP開發於一體的專業服務公司。
  • 小程序、app、公眾號開發的區別是什麼?西安小程序開發專業
    微信小程序已經上線3年多了,功能和app非常相似,而且又是基於微信的基礎,可以和公眾號相輔助使用,那麼小程序、app和公眾號的區別是什麼?首先,公眾號是微信自帶的功能,只要企業註冊了公眾號就可以直接使用,如果要使用一些營銷功能,比如微信商城、掃碼點餐這些功能,就需要二次開發,而小程序則是基於維信開發的,這三者詳細的區別有哪些呢?青雲在線小編給大家分享相關的資料。
  • 微信小程序製作價格
    微信小程序製作價格與很多因素有關,主要取決於你要做多少程序頁面和要做的頁面內容及功能的複雜程度等。小程序相比於手機APP,在開發成本上還是便宜很多的。1、自己組技術團隊開發需要支付員工費用,這要算在開發一個小程序的成本中。
  • TopSoft Labs發布2020年十大微信小程序軟體開發公司排名
    2020年,眾多網際網路商家在疫情衝擊和公域流量成本不斷提高中不約而同面臨著持續增長的壓力,「私域電商」成為新電商發展關鍵詞。可以說,用好私域流量、通過微信小程序和社群來布局將使其成王者之勢。而就在近日,第三方權威軟體評測機構TopSoft Labs公布了2020年度微信小程序軟體排名,TopSoft Labs通過微信小程序性能、運營、用戶和價格四個大緯度及多個子緯度進行獨立和專業的評測。最終出爐了這份2020年十大微信小程序軟體名單。
  • 商家是怎麼製作微信小程序的?
    在現代生活中微信小程序已經應用到了各個行業生活中是非常廣泛的,許多 線下實體的的店家都想製作微信小程序來進行線上購物模式那商家想要製作微信小程序是怎麼製作的呢,現在就仔細說一下是如何製做微信小程序的?對店家來說基本上就是想根據微信小程序來開展網絡在線購物商城達到發展線上商城的購物模式,如果是這麼考慮的話微信小程序必須想到要制定的微信小程序是需要什麼類型的用戶以及開發出需要什麼功能以及有什麼樣的設計風格的小程序,商家能夠依據同行業所做的小程序實例可以當做參考是否需要其中的小程序功能。