<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          闊別兩年,webpack 5 正式發(fā)布了!

          共 16167字,需瀏覽 33分鐘

           ·

          2020-10-13 11:21

          HI,繼 Vue 3 和 React 17 之后,我又來啦!印記中文已經(jīng)完成了 webpack v5 中文文檔的同步及翻譯工作,大家可以無縫進(jìn)行閱讀哦。

          文檔地址請認(rèn)準(zhǔn):https://webpack.docschina.org

          文檔地址請認(rèn)準(zhǔn):https://webpack.docschina.org

          文檔地址請認(rèn)準(zhǔn):https://webpack.docschina.org

          重要的事說三遍,我們的文檔隸屬于官方,我們沒有其他的域名哦,并且是與官方進(jìn)行實(shí)時同步。

          2020 年 10 月 10 日,webpack 升級至 5.0 版本,并且為官網(wǎng)添加了博客目錄。我們及時的進(jìn)行了同步,此文是我們閱讀后總結(jié)歸納的版本。話不多說開始正文。

          自從 2018 年 2 月,webpack4 發(fā)布以來,webpack 就暫時沒有更進(jìn)一步的重大更新,為了保持 API 的一致性,舊的架構(gòu)沒有做太多改變,遺留了很多的包袱。闊別 2 年多后,2020 年 10 月 10 日,webpack 5 正式發(fā)布,并帶來了諸多重大的變更,將會使前端工程師的構(gòu)建效率與質(zhì)量大為提升。

          本次重大發(fā)布的整體發(fā)展方向如下:

          • 嘗試用持久性緩存來提高構(gòu)建性能。
          • 嘗試用更好的算法和默認(rèn)值來改進(jìn)長期緩存。
          • 嘗試用更好的 Tree Shaking 和代碼生成來改善包大小。
          • 嘗試改善與網(wǎng)絡(luò)平臺的兼容性。
          • 嘗試在不引入任何破壞性變化的情況下,
            • 清理那些在實(shí)現(xiàn) v4 功能時處于奇怪狀態(tài)的內(nèi)部結(jié)構(gòu)。
          • 試圖通過現(xiàn)在引入突破性的變化來為未來的功能做準(zhǔn)備,
            • 盡可能長時間地保持在 v5 版本上。

          webpack 5Release Note 非常長,本文嘗試摘出最簡練的信息。

          功能清除

          清理已棄用的功能

          所有在 webpack 4 標(biāo)記即將過期的功能,都已在該版移除。因此在遷移到 webpack 5 之前,請確保你在 webpack 4 運(yùn)行的構(gòu)建不會有任何的功能過期警告。

          不再為 Node.js 模塊 自動引用 Polyfills

          不再為 Node.js 內(nèi)置模塊自動添加 Polyfills。任何項(xiàng)目中有引用 Node.js 內(nèi)置模塊,在 webpack 4 或之前的版本中會自動添加 Polyfills。但 webpack 5 將不會再這樣做,webpack會投入更多的精力到前端模塊的兼容性工作中。

          如果你的代碼中有引用這些 Node.js 的模塊,要升級到 webpack 5, 將盡量使用前端的模塊,或者自行手動添加適合的 Polyfills

          而針對那些類庫的開發(fā)者,請?jiān)?package.json 中定義 browser 字段,使類庫在前端能適用。

          針對長期緩存的優(yōu)化

          確定的 Chunk、模塊 ID 和導(dǎo)出名稱

          新增了長期緩存的算法。這些算法在生產(chǎn)模式下是默認(rèn)啟用的。

          chunkIds: "deterministic"moduleIds: "deterministic"mangleExports: "deterministic"

          該算法以確定性的方式為模塊和分塊分配短的(3 或 5 位)數(shù)字 ID,這是包大小和長期緩存之間的一種權(quán)衡。由于這些配置將使用確定的 ID 和名稱,這意味著生成的緩存失效不再更頻繁。

          真正的內(nèi)容哈希

          當(dāng)使用[contenthash]時,Webpack 5 將使用真正的文件內(nèi)容哈希值。之前它 "只 "使用內(nèi)部結(jié)構(gòu)的哈希值。當(dāng)只有注釋被修改或變量被重命名時,這對長期緩存會有積極影響。這些變化在壓縮后是不可見的。

          更好的開發(fā)支持

          命名代碼塊 ID

          在開發(fā)模式下,默認(rèn)啟用的新命名代碼塊 ID 算法為模塊(和文件名)提供了人類可讀的名稱。模塊 ID 由其路徑?jīng)Q定,相對于 context。代碼塊 ID 由代碼塊的內(nèi)容決定。

          所以你不再需要使用import(/* webpackChunkName: "name" */ "module")來調(diào)試。但如果你想控制生產(chǎn)環(huán)境的文件名,還是有意義的。

          可以在生產(chǎn)環(huán)境中使用 chunkIds: "named" 在生產(chǎn)環(huán)境中使用,但要確保不要不小心暴露模塊名的敏感信息。

          遷移:如果你不喜歡在開發(fā)中改變文件名,你可以通過 chunkIds: "natural" 來使用舊的數(shù)字模式。

          模塊聯(lián)邦

          Webpack 5 增加了一個新的功能 "模塊聯(lián)邦",它允許多個 webpack 構(gòu)建一起工作。從運(yùn)行時的角度來看,多個構(gòu)建的模塊將表現(xiàn)得像一個巨大的連接模塊圖。從開發(fā)者的角度來看,模塊可以從指定的遠(yuǎn)程構(gòu)建中導(dǎo)入,并以最小的限制來使用。

          支持嶄新的 Web 平臺功能

          對于 Web 平臺的的一些支持 ,Webpack 5 也做了更好的完善更新。

          JSON 模塊

          比如對 JSON 模塊,會與現(xiàn)在的提案保持一致,并且要求進(jìn)行默認(rèn)的導(dǎo)出,否則會有警告信息。即使使用默認(rèn)導(dǎo)出,未使用的屬性也會被 optimization.usedExports 優(yōu)化丟棄,屬性會被 optimization.mangleExports 優(yōu)化打亂。

          如果想用自定義的 JSON 解析器,可以在 Rule.parser.parse 中指定一個自定義的 JSON 解析器來導(dǎo)入類似 JSON 的文件(例如針對 toml、yaml、json5 等)。

          資源模塊

          Webpack 5 現(xiàn)在已經(jīng)對表示資源的模塊提供了內(nèi)置支持。這些模塊可以向輸出文件夾發(fā)送一個文件,或者向 javascript 包注入一個 DataURI。無論哪種方式,它們都會給出一個 URL 來工作。

          它們可以通過多種方式被使用:

          • import url from "./image.png" 和 在module.rule 中設(shè)置 type: "asset"當(dāng)匹配這樣的導(dǎo)入時。(老方法)
          • new URL("./image.png", import.meta.url) (新方式)

          選擇 "新的方式 "語法是為了允許在沒有打包工具的情況下運(yùn)行代碼。這種語法也可以在瀏覽器中的原生 ECMAScript 模塊中使用。

          原生 Worker 支持

          當(dāng)把資源的 new URLnew Worker/new SharedWorker/navigator.serviceWorker.register 結(jié)合起來時,webpack 會自動為 web worker 創(chuàng)建一個新的入口點(diǎn)(entrypoint)。

          new Worker(new URL("./worker.js", import.meta.url))

          選擇這種語法也是為了允許在沒有打包工具的情況下運(yùn)行代碼。這種語法在瀏覽器的原生 ECMAScript 模塊中也可以使用。

          URIs

          Webpack 5 支持在請求中處理協(xié)議。

          • 支持data:。支持 Base64 或原始編碼。Mimetype 可以在module.rule中被映射到加載器和模塊類型。例如:import x from "data:text/javascript,export default 42"
          • 支持file:
          • 支持http(s):,但需要通過new webpack.experiments.s schemesHttp(s)UriPlugin()選擇加入。
            • 默認(rèn)情況下,當(dāng)目標(biāo)為 "web "時,這些 URI 會導(dǎo)致對外部資源的請求(它們是外部資源)。

          支持請求中的片段。例如:./file.js#fragment

          異步模塊

          Webpack 5 支持所謂的 "異步模塊"。這些模塊并不是同步解析的,而是基于異步和 Promise 的。

          通過 "import "導(dǎo)入它們會被自動處理,不需要額外的語法,而且?guī)缀蹩床怀鰠^(qū)別。

          通過require()導(dǎo)入它們會返回一個解析到導(dǎo)出的 Promise。

          在 webpack 中,有多種方式來擁有異步模塊。

          • 異步的外部資源(async externals)
          • 新規(guī)范中的 WebAssembly 模塊
          • 使用頂層 Await 的 ECMAScript 模塊。

          外部資源

          Webpack 5 增加了更多的外部類型來覆蓋更多的應(yīng)用:

          promise: 一個評估為 Promise 的表達(dá)式。外部模塊是一個異步模塊,解析值作為模塊導(dǎo)出使用。

          import。原生的 import() 用于加載指定的請求,外部模塊是一個異步模塊,解析值作為模塊導(dǎo)出。外部模塊是一個異步模塊。

          module: 尚未實(shí)現(xiàn),但計(jì)劃通過 import x from "..." 加載模塊。

          script: 通過

          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                    <th id="afajh"><progress id="afajh"></progress></th>
                    蜜桃视频在线无码播放 | 天天狠狠干 | 日逼丁香 | 搞黄色的在线观看 | 一区毛片 |