在多個文件中import同一個文件,webpack會屢次打包嗎

最近本身在練習寫React,Vue的時候,會在不一樣的子組件中屢次import同一個文件,例如:import React from 'react'import Vue from 'vue',引入的次數多了慢慢讓我產生了疑惑,引入這麼屢次,webpack會屢次打包嗎?直覺告訴我webpack並不傻,不會愚蠢的打包屢次使打包後的文件異常臃腫,若是不會的話爲何不會呢?懷着好奇心在谷歌搜索好久也沒有找到讓我信服的的答案,因而我本身作了個實驗(源碼),來證實本身的猜測:vue

1.模擬react/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部分。demo部分
咱們發如今bundle.js中引入的文件都被分紅了帶有序號(num)的「代碼片」,經過__webpack_require__(num)來引入對應的模塊,而咱們import兩次用來測試的demo.js也只是被打包成了序號爲2的代碼塊,由此咱們能夠推論出:git

不一樣文件中屢次import同一個文件,webpack並不會屢次打包,只會在打包後的文件中會屢次引用打包後的該文件對應的函數。

問題終於搞清楚了,很舒服!!👻github

相關文章
相關標籤/搜索