webpack小妖精

@文章來(lái)源:拉鉤大前端就業(yè)訓(xùn)練營(yíng)-念念

模塊化開(kāi)發(fā)及標(biāo)準(zhǔn)規(guī)范

模塊化

  • CommonJS 是以同步模式加載模塊

  • AMD 規(guī)范 require.js

    • 使用起來(lái)相對(duì)復(fù)雜
    • 模塊 JS 文件請(qǐng)求頻繁
  • ESmoudles 特性

    • ESM 自動(dòng)采用嚴(yán)格模式,忽略'use strict'
    • 每個(gè) ES module 都是運(yùn)行在單獨(dú)的私有作用域中
    • ESM 是通過(guò) cors 的方式請(qǐng)求外部的 js 模塊的
    • ESM 的 script 標(biāo)簽會(huì)延遲執(zhí)行腳本
  • ESmodule 導(dǎo)入導(dǎo)出

    • export 導(dǎo)出
      • export 導(dǎo)出的不是對(duì)象字面量的簡(jiǎn)寫(xiě)
      • export default 導(dǎo)出的可以是對(duì)象字面量
    • import xx from 'xx' 導(dǎo)入
      • 導(dǎo)出的是只讀的
      • 只能出現(xiàn)在最外層作用域
      • 使用全局的 import()返回一個(gè) promise
    • ployfill -- ESmodule load
      • 引入腳本文件到頁(yè)面中
    • node 使用 esmodule
      • 修改后綴名為 mjs
      • node --experimental-modules xx.mjs
  • ES module 載入 common.js 模塊

    • ESmodule 可以載入 common.js 模塊成 commonjs 只能載入默認(rèn)成員,不能直接提取
  • 新版本 package.json 添加 type:module

    • 如果要使用 commonjs 規(guī)范修改 cjs
  • babel 實(shí)現(xiàn)兼容

模塊化打包工具

  • 模塊化帶來(lái)的問(wèn)題
    • esmodules 存在環(huán)境兼容問(wèn)題
    • 模塊文件過(guò)多,網(wǎng)絡(luò)請(qǐng)求頻繁
    • 所以前端資源都需要模塊化

webpack

  • css-loader 將資源文件轉(zhuǎn)換為 js 工作
  • 文件資源加載器 file-loader
  • webpack 工作模式
    • 生產(chǎn)模式下,自動(dòng)優(yōu)化打包結(jié)果;
    • 開(kāi)發(fā)模式下,自動(dòng)優(yōu)化打包速度,添加一些調(diào)試過(guò)程中的輔助;
    • None 模式下,運(yùn)行最原始的打包,不做任何額外處理;
  • webpack 模塊的加載方式
    • 遵循 ES Modules 標(biāo)準(zhǔn)的 import 聲明
    • 遵循 CommonJS 標(biāo)準(zhǔn)的 require 函數(shù)
    • 遵循 AMD 標(biāo)準(zhǔn)的 define 函數(shù)和 require 函數(shù)
    • 樣式代碼中的 @import 指令和 url 函數(shù)
    • HTML 代碼中圖片標(biāo)簽的 src 屬性
  • webpack 插件及其用法見(jiàn)代碼
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容