webpack初探與模組化

2021-10-01 16:06:31 字數 3008 閱讀 2051

沒有webpack的缺點:

**量大時,可讀性不好

函式間依賴嚴重,維護性不好

協作開發,容易變數命名衝突

我們引入js標籤的問題:

如果乙個script不好維護

當script標籤很多會有效能問題: 同步載入會阻塞,非同步載入瀏覽器網路請求只能載入6個js檔案

2. 作用域問題: 可能會導致全域性變數汙染

// add.js檔案

function

add(a,

b)function

display

(val

)// 該函式只想在add.js檔案內部使用 但是引入到html文件中,會被汙染

改進:使用立即執行函式,並暴露需要的方法

(

function

()function

display

(val

)window

.add

=add

;// 暴露方法

})()

問題:引入依賴的問題

方法執行之前要引入模組

<

script

>

add(1,

2)// 方法還沒引入就執行,報錯

math(1

,2)// 方法還沒引入就執行,報錯

<

/script>

<

script

src=

"./add.js"

><

/script>

<

script

src=

"./math.js"

><

/script>

在模組中包含其他模組: 必須要先引入其他模組,不然會報錯

// math.js檔案

(function

()window

.math

=math

;})()

解決: gulp grunt等工具

解決方式: 在模組中告訴需要先引入其他模組

/**

* add.js

*/// 在注釋中告訴要引入該模組之前引入上面的模組(使用工具後自動新增)

(function

()window

.math

=math

;})()

問題1: 我們修改了乙個檔案,可能就打破了依賴

問題2: dead code(只使用乙個方法,但會引入整個庫,佔空間;對比在webpack中,沒被引入的方法會自動刪除)

node commonjs: 只引入執行的方法,不會整個庫引入

使用方法: 從模組檔案匯出,匯入到入口檔案

匯出:add.js模組檔案

// add.js模組檔案

function

add(a,

b)function

display

(val

)module

.exports

=add

;// 匯出方法

匯入:入口檔案main.js

// 匯入檔案

varadd

=require

('../add'

)// 字尾自動識別

varmath

=require

('../math'

)// 字尾自動識別

add(1,

2)// 可以在node中直接執行

math(3

,4)// 可以在node中直接執行

問題:沒有瀏覽器的支援,直接引入會報錯: require is not defined

解決:打包工具 browerify (webpack之前的)

解決方式: 把./node/main.js檔案作為入口檔案,打包生成乙個檔案./dist/main.js(正常的js檔案),browerify會自動處理裡面變數衝突的問題,然後在html檔案中引入該js檔案即可。

問題: commonjs語法是靜態的

描述: 有些功能使用者僅需要按需載入,browerify會把所有js模組打包成乙個大大的js檔案,載入到html中的時候,會導致使用者在第一次載入的時候很慢(webpack還可以把這裡打包出來的檔案再進行分割(軟載入,自動處理))

非同步載入js模組檔案(以過渡)

amd: require.js

使用陣列方式非同步載入js模組,但是模組依賴太嚴重會自動打包成很大的js檔案。

//my/shirt.js now has some dependencies, a cart and inventory

//module in the same directory as shirt.js

define

(["./cart"

,"./inventory"

],function

(cart

,inventory)}

});

cmd: sea.js(國內開發)

問題: 太動態 打包出來很膨脹

推出模組化標準:沒出標準之前有人使用amd,有人使用cmd,需要乙個機制來配合,出標準後不再需要處理這些。

問題:2023年才推出,以前的瀏覽器不支援。

解決方案: 需要在script type='module'

解決方案: 推出了webpack:

任意模組化的語法都支援

按需載入 非同步打包

工具的集合

模組化函式初探!

終於學到這了!之前乙個檔案裡堆滿了各種函式,難受死我了,終於能夠分成幾個檔案操作了。測試了下,大致如下 main.cpp define crt secure no warnings include include include test.h intmain void function.cpp in...

webpack之css模組化

前言 本文演示了 開啟css loader的模組化配置 當前專案目錄和package.json配置 如何使css模組化?需要在我們的webpack.config.js中對css loader進行一些額外設定。編輯main.css 執行 npm run dev 瀏覽器截圖如下 可以看出瀏覽器控制台列印...

webpack 及 模組化總結

通過 npm yarn 的方式來安裝 webpack 安裝方式 本地安裝 優勢 管理方便 易於復用 解決 專案開發過程中的衝突 依賴 基於amd的requirejs模組化庫 2.cmd common module definition cmd則是依賴就近。2 每乙個模組內宣告的變數都是區域性變數,不...