最近本身在練習寫React,Vue的時候,會在不一樣的子組件中屢次import同一個文件,例如:import React from 'react'
、import Vue from 'vue'
,引入的次數多了慢慢讓我產生了疑惑,引入這麼屢次,webpack會屢次打包嗎?直覺告訴我webpack並不傻,不會愚蠢的打包屢次使打包後的文件異常臃腫,若是不會的話爲何不會呢?懷着好奇心在谷歌搜索好久也沒有找到讓我信服的的答案,因而我本身作了個實驗(源碼),來證實本身的猜測:vue
第一步是安裝相關webpack、babel等相關依賴以及建好目錄
webpack設置:node
//webpack.config.js module.exports = { entry: './app.js', output: { filename: 'bundle.js' }, module: { loaders:[ { test: /\.js[x]?$/, exclude: /node_modules/, loader: 'babel-loader?presets[]=es2015&presets[]=react' }, ] } }
package.json所需依賴:react
//package.json { "name": "test", "version": "0.0.1", "devDependencies": { "webpack": "^1.14.0" }, "dependencies": { "babel-core": "^6.21.0", "babel-loader": "^6.2.10", "babel-preset-es2015": "^6.18.0", "babel-preset-react": "^6.16.0" } }
其餘用於測試的文件:webpack
//demo.js--至關於vue export default { test(argu) { console.log(argu) } } //test1.js --至關於某個組件 import demo from './demo' export default { test1() { demo.test(1) } } //test2.js --至關於另外一個組件 import demo from './demo' export default { test1() { demo.test(2) } } //add.js --入口文件 import Test1 from './test1' import Test2 from './test2' Test1.test1() Test2.test2()
我在 test1.js
, test2.js
中都引入demo.js
,而且exoprt 出依賴demo.js
的方法,而後再在app.js
中引入 test1.js
, test2.js
webpack打包後打開bundle.js,找到demo部分。
咱們發如今bundle.js
中引入的文件都被分紅了帶有序號(num)的「代碼片」,經過__webpack_require__(num)
來引入對應的模塊,而咱們import兩次用來測試的demo.js
也只是被打包成了序號爲2的代碼塊,由此咱們能夠推論出:git
問題終於搞清楚了,很舒服!!👻github