create-react-app
腳手架尚未更新到webpack4,可是猛然間發現webpack4已經到 v4.12.0 版本了!!!慌得不行,正好端午有空因此研究了一波,本身搭建了一個簡單的react腳手架。實現本地代理,cssModule,css預處理,postCss,文件壓縮等經常使用的功能css
npm init
生成package.jsonnpm i webpack webpack-cli webpack-dev-server --save-dev
webpack.config.base.js
基本配置webpack.config.dev.js
開發配置webpack.config.prod.js
生產配置源碼node
webpack4新出了一個mode模式,有三種選擇,
none
,development
,production
.最直觀的感覺就是你能夠少些不少配置,由於一旦你開啓了mode模式,webpack4就會給你設置不少基本的東西react
{ "scripts": { "dev": "webpack-dev-server --mode development", "build": "webpack --mode production" }, }
module.exports = { //開發環境下默認啓用cache,在內存中對已經構建的部分進行緩存 //避免其餘模塊修改,可是該模塊未修改時候,從新構建,可以更快的進行增量構建 //屬於空間換時間的作法 cache: true, output: { pathinfo: true //輸入代碼添加額外的路徑註釋,提升代碼可讀性 }, devtools: "eval", //sourceMap爲eval類型 plugins: [ //默認添加NODE_ENV爲development new webpack.DefinePlugin({ "process.env.NODE_ENV": JSON.stringify("development") }), ], optimization: { namedModules: true, //取代插件中的 new webpack.NamedModulesPlugin() namedChunks: true } }
module.exports = { performance: { hints: 'warning', maxAssetSize: 250000, //單文件超過250k,命令行告警 maxEntrypointSize: 250000, //首次加載文件總和超過250k,命令行告警 } plugins: [ //默認添加NODE_ENV爲production new webpack.DefinePlugin({ "process.env.NODE_ENV": JSON.stringify("production") }) ], optimization: { minimize: true, //取代 new UglifyJsPlugin(/* ... */) providedExports: true, usedExports: true, //識別package.json中的sideEffects以剔除無用的模塊,用來作tree-shake //依賴於optimization.providedExports和optimization.usedExports sideEffects: true, //取代 new webpack.optimize.ModuleConcatenationPlugin() concatenateModules: true, //取代 new webpack.NoEmitOnErrorsPlugin(),編譯錯誤時不打印輸出資源。 noEmitOnErrors: true } }
webpack3咱們用
commonchunk
,在4裏面如今廢除了,並使用optimization代替webpack
module.exports = { optimization: { minimize: env === 'production' ? true : false, //是否進行代碼壓縮 splitChunks: { chunks: "async", minSize: 30000, //模塊大於30k會被抽離到公共模塊 minChunks: 1, //模塊出現1次就會被抽離到公共模塊 maxAsyncRequests: 5, //異步模塊,一次最多隻能被加載5個 maxInitialRequests: 3, //入口模塊最多隻能加載3個 name: true, cacheGroups: { default: { minChunks: 2, priority: -20 reuseExistingChunk: true, }, vendors: { test: /[\\/]node_modules[\\/]/, priority: -10 } } }, runtimeChunk { name: "runtime" } } }
如今咱們只須要在optimization中配置runtimeChunk和splitChunks便可 ,具體配置見:splitChunksgit
就一個字,快!!!速度提升了50%以上github
webpack3
web
webpack4
npm
你們好,這裏是「 TaoLand 」,這個博客主要用於記錄一個菜鳥程序猿的Growth之路。這也是本身第一次作博客,但願和你們多多交流,一塊兒成長!文章將會在下列地址同步更新……
我的博客:www.yangyuetao.cn
小程序:TaoLandjson