loadsh在小程序裏的引入比較麻煩。緣由以下:node
一、沒法按需引入。因爲 taro
的 webpack
配置不會對 es6 module
作 tree shaking, 因此會總體引入loash,直接撐爆verndor.js
webpack
二、環境問題,小程序環境下一些全局變量不存在,須要從新指定es6
在config/index.js配置以下:web
webpackChain(chain) {npm
// chain.plugin('analyzer')小程序
// .use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin, [])markdown
//lodash 瘦身配置oop
// 奇怪行爲,須要設置這個www.npmjs.com/package/lod…ui
// 也能夠移除一些,用來瘦身,目前發現shorthands,coercions,paths是必須的,不然會很詭異spa
chain.plugin('lodash-webpack-plugin')
.use(require('lodash-webpack-plugin'), [
{
shorthands: true,
cloning: true,
caching: true,
collections: true,
exotics: true,
guards: true,
memoizing: true,
coercions: true,
flattening: true,
paths: true,
}])
// 將 lodash 單獨拆分出來 (防止vendors.js過大)
chain.merge({
optimization: {
splitChunks: {
cacheGroups: {
lodash: {
name: 'lodash',
priority: 1000,
test(module) {
return /node_modules[\\/]lodash/.test(module.context)
},
},
},
},
},
})
},
commonChunks(commonChunks) { // 添加 lodash 公共文件
commonChunks.push('lodash')
return commonChunks
},
一、提早聲明全局變量
loadsh-prepare.js
// 使用loadsh必須先聲明
global.Object = Object
global.Array = Array
global.Buffer = Buffer
global.DataView = DataView
global.Date = Date
global.Error = Error
global.Float32Array = Float32Array
global.Float64Array = Float64Array
global.Function = Function
global.Int8Array = Int8Array
global.Int16Array = Int16Array
global.Int32Array = Int32Array
global.Map = Map
global.Math = Math
global.Promise = Promise
global.RegExp = RegExp
global.Set = Set
global.String = String
global.Symbol = Symbol
global.TypeError = TypeError
global.Uint8Array = Uint8Array
global.Uint8ClampedArray = Uint8ClampedArray
global.Uint16Array = Uint16Array
global.Uint32Array = Uint32Array
global.WeakMap = WeakMap
global.clearTimeout = clearTimeout
global.isFinite = isFinite
global.parseInt = parseInt
global.setTimeout = setTimeout
export default {}
二、引入全局變量
loadsh.ts
import {} from './loadsh-prepare'
import _ from 'lodash'
export default _
雖然loadsh很方便,咱們也最大程度作了瘦身。可是打包後依然很大,若是不是非用不可,建議不用