webpack的tree shaking的實現(xiàn)方法
webpack的tree shaking
util.js
export const a = () => { console.log("a123456方法"); }; export const b = () => { console.log("b123456方法"); };
main.js
import {a} from './utils'; a();
sideEffects
一般而言,上述代碼,在 webpack 進行 tree shaking 能夠不打包 function b 的代碼,這是因為 webpack 對代碼進行了分析, b 沒有引用不會打包。
但是npm包中,通過這種方式去引用,你會發(fā)現(xiàn) tree shaking 并沒有生效, 這是因為webpack無法識別你的代碼是否存在副作用,故而無法執(zhí)行tree shaking ,解決方法是給你的npm包 package.json 加上 sideEffects: false ,告訴webpack是無副作用的, webpack 可以放心處理。
什么是副作用( side effect ),即你的函數(shù)會對外部變量造成影響,比如
function a() {} a.location = window.location a.location.hash = 'll'
這就是一個副作用函數(shù),所以編寫純函數(shù)
es6
如果你的npm包使用了es6的特性,比如類,最終你打包出來的代碼只打包了成了es5的,那么恭喜你,基本上你的npm包和 tree shaking 無緣了。
es6轉es5(babel),會產(chǎn)生大量的副作用,所以基本上大部分包都提供es6版本的代碼, tree shaking 交給你本地的webpack去處理。
當然也不是完全沒有辦法,antd老大哥就開發(fā)了一個babel-plugin-import,實現(xiàn)精確引用的代碼的方式,但是你必須將每個模塊單獨分成一個文件。
總結
基本上tree shaking的解決方法就是導出es6模塊,同時標明自己是無副作用的,如果加上babel-plugin-import就更完美了
rollup的一個提案蠻有趣的!
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
setTimeout()與setInterval()方法區(qū)別介紹
計時器setTimeout()和setInterval()兩個都是js的計時功能的函數(shù)兩個有些區(qū)別,下面為大家簡單介紹下,希望對大家有所幫助2013-12-12分享10個優(yōu)化代碼的CSS和JavaScript工具
如果你想在保持文件的時候或執(zhí) 行的階段lint代碼,那么linting工具也可以如你所愿。這取決于個人的選擇。如果你正在找尋用于CSS和JavaScript最好的 linting工具,那么請繼續(xù)閱讀2016-05-05KnockoutJS 3.X API 第四章之事件event綁定
event綁定即為事件綁定,即當觸發(fā)相關DOM事件的時候回調(diào)函數(shù),這篇文章主要介紹了KnockoutJS 3.X API 第四章之事件event綁定的相關知識,感興趣的朋友一起看看吧2016-10-10js中的關聯(lián)數(shù)組與普通數(shù)組詳解
下面小編就為大家?guī)硪黄猨s中的關聯(lián)數(shù)組與普通數(shù)組詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-07-07