最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Webpack source map實戰(zhàn)分析詳解

 更新時間:2022年12月11日 11:22:17   作者:Rsquo  
這篇文章主要為大家介紹了Webpack source map示例分析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

一、webpack基礎

推薦我的另一篇文章:Webpack基礎

二、source-map

2.1 認識source-map

代碼通常運行在瀏覽器上時,是通過打包壓縮的:

  • 真實跑在瀏覽器上的代碼,和我們編寫的代碼其實是有差異
  • 比如ES6的代碼可能被轉換成ES5
  • 比如對應的代碼行號、列號在經(jīng)過編譯后肯定會不一致
  • 比如代碼進行丑化壓縮時,會將編碼名稱等修改
  • 比如使用了TypeScript等方式編寫的代碼,最終轉換成JavaScript

但是,當代碼報錯需要調(diào)試時(debug),調(diào)試轉換后的代碼是很困難的

那么如何可以調(diào)試這種轉換后不一致的代碼呢?答案就是 source-map

  • source-map 是從已轉換的代碼,映射到原始的源文件
  • 使瀏覽器可以重構原始源并在調(diào)試器中顯示重建的原始源

2.2 如何使用source-map

如何可以使用source-map呢?

const path = require('path')
module.exports = {
  mode: 'production',
  devtool: "source-map",
  entry: './src/main.js',
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, './build')
  }
}
console.log("hello world"),console.log("foo function exec~");
//# sourceMappingURL=bundle.js.map
  • 第一步:根據(jù)源文件,生成source-map文件,webpack在打包時,可以通過配置生成source-map
  • 第二步:在轉換后的代碼,最后添加一個注釋,它指向sourcemap

瀏覽器會根據(jù)我們的注釋,查找相應的source-map,并且根據(jù)source-map還原我們的代碼,方便進行調(diào)試。

在Chrome中,可以按照如下的方式打開source-map:

  • 鼠標右鍵檢查,打開控制臺后點擊右上角的設置

2.3 source-map文件分析

最初source-map生成的文件大小是原始文件的10倍,第二版減少了約50%,第三版又減少了50%,所以目前一個133kb的文件,最終的source-map的大小大概在300kb。

目前的source-map長什么樣子呢?

  • version:當前使用的版本,也就是最新的第三版
  • sources:從哪些文件轉換過來的source-map和打包的代碼(最初始的文件)
  • names:轉換前的變量和屬性名稱
  • mappings:source-map用來和源文件映射的信息(比如位置信息等),一串base64 VLQ(veriable-length quantity可變長度值)編碼
  • file:打包后的文件(瀏覽器加載的文件)
  • sourceContent:轉換前的具體代碼信息(和sources是對應的關系)
  • sourceRoot:所有的sources相對的根目錄

2.4 source-map常見值

如何在使用webpack打包的時候,生成對應的source-map呢?

  • webpack 提供了非常多的選項(目前是26個),來處理source-map
  • 選擇不同的值,生成的source-map會稍微有差異,打包的過程也會有性能的差異,可以根據(jù)不同的情況進行選擇

下面幾個值不會生成source-map

false:不使用source-map,也就是沒有任何和source-map相關的內(nèi)容

noneproduction模式下的默認值(什么值都不寫) ,不生成source-map

evaldevelopment模式下的默認值,不生成source-map

  • 但是它會在eval執(zhí)行的代碼中,添加 //# sourceURL=
  • 它會被瀏覽器在執(zhí)行時解析,并且在調(diào)試面板中生成對應的一些文件目錄,方便我們調(diào)試代碼

其他常見的值

  • source-map:通常在production模式下設置,生成一個獨立的source-map文件,并且在bundle文件中有一個注釋,指向source-map文件
  • bundle文件中有如下的注釋:
  • 開發(fā)工具會根據(jù)這個注釋找到source-map文件,并且解析 //# sourceMappingURL=bundle.js.map

2.5 source-map不常見值

eval-source-map:會生成sourcemap,但是source-map是以DataUrl添加到eval函數(shù)的后面

inline-source-map:會生成sourcemap,但是source-map是以DataUrl添加到bundle文件的后面

cheap-source-map(development):

  • 會生成sourcemap,但是會更加高效一些(cheap低開銷),因為它沒有生成列映射(Column Mapping)
  • 平常在開發(fā)中,只需要行信息通常就可以定位到錯誤了

cheap-module-source-map(development):

  • 會生成sourcemap,類似于cheap-source-map,但是對源自loader的sourcemap處理會更好
  • 比如通過 babel-loader來處理,生成的source-map文件會將一些空行刪掉,無法更好的還原,此時可以使用此選項

hidden-source-map:

  • 會生成sourcemap,但是不會對source-map文件進行引用
  • 相當于刪除了打包文件中對sourcemap的引用注釋

如果我們手動添加進來,那么sourcemap就會生效了

//# sourceMappingURL=bundle.js.map

nosources-source-map:會生成sourcemap,但是生成的sourcemap只有錯誤信息的提示,不會生成源代碼文件

組合值

組合的規(guī)則如下:

  • inline-|hidden-|eval:三個值時三選一
  • nosources:可選值
  • cheap可選值,并且可以跟隨module的值

[inline-|hidden-|eval-][nosources-][cheap-[module-]]source-map

2.6 source-map最佳實踐

開發(fā)階段:推薦使用 source-map 或者 cheap-module-source-map

  • 這分別是vue和react使用的值,可以獲取調(diào)試信息,方便快速開發(fā)

測試階段:推薦使用 source-map 或者 cheap-module-source-map

  • 測試階段我們也希望在瀏覽器下看到正確的錯誤提示

發(fā)布階段:false、缺省值(不寫)

以上就是Webpack source map示例分析詳解的詳細內(nèi)容,更多關于Webpack source map的資料請關注腳本之家其它相關文章!

相關文章

  • 數(shù)據(jù)結構Typescript之哈希表實現(xiàn)詳解

    數(shù)據(jù)結構Typescript之哈希表實現(xiàn)詳解

    這篇文章主要為大家介紹了數(shù)據(jù)結構Typescript之哈希表實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • TypeScript 交叉類型使用方法示例總結

    TypeScript 交叉類型使用方法示例總結

    這篇文章主要為大家介紹了TypeScript 交叉類型使用方法示例總結,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • TypeScript類型any never void和unknown使用場景區(qū)別

    TypeScript類型any never void和unknown使用場景區(qū)別

    這篇文章主要為大家介紹了TypeScript類型any never void和unknown使用場景區(qū)別,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • TypeScript快速學習入門基礎語法

    TypeScript快速學習入門基礎語法

    TypeScript的基礎語法,包括變量聲明、復合類型(數(shù)組和對象)、條件控制(if-else和switch)、循環(huán)(for和while)、函數(shù)(基礎和箭頭函數(shù),以及可選參數(shù))、面向對象特性(枚舉、接口、繼承)以及模塊開發(fā)中的導出和導入
    2024-07-07
  • typescript?type類型使用梳理總結

    typescript?type類型使用梳理總結

    這篇文章主要為大家介紹了typescript?type類型使用梳理總結,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • js 獲取今天以及過去日期

    js 獲取今天以及過去日期

    這篇文章主要介紹了js獲得當前系統(tǒng)日期時間以及過去系統(tǒng)日期時間的方法,涉及javascript操作日期時間的相關技巧,示例代碼如下,需要的朋友可以參考下
    2017-04-04
  • 簡單三行代碼函數(shù)實現(xiàn)幾十行Typescript類型推導

    簡單三行代碼函數(shù)實現(xiàn)幾十行Typescript類型推導

    這篇文章主要為大家介紹了簡單三行代碼函數(shù)實現(xiàn)幾十行Typescript類型推導的方案示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • TypeScript條件類型示例全面講解

    TypeScript條件類型示例全面講解

    這篇文章主要為大家介紹了TypeScript條件類型示例的全面詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • TypeScript判斷對稱的二叉樹方案詳解

    TypeScript判斷對稱的二叉樹方案詳解

    這篇文章主要為大家介紹了TypeScript判斷對稱的二叉樹方案實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • 適合面向ChatGPT編程的架構示例詳解

    適合面向ChatGPT編程的架構示例詳解

    這篇文章主要為大家介紹了適合面向ChatGPT編程的架構示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03

最新評論

和平区| 惠水县| 广州市| 塘沽区| 启东市| 临朐县| 邵武市| 青岛市| 大同县| 阿克| 阜平县| 汽车| 牟定县| 长垣县| 新巴尔虎左旗| 苗栗县| 惠来县| 沾化县| 松溪县| 琼海市| 龙岩市| 电白县| 泰州市| 清水县| 万年县| 南皮县| 桃江县| 瓦房店市| 韩城市| 德州市| 尼勒克县| 鲁山县| 渭南市| 北川| 文成县| 淮北市| 宜章县| 衡南县| 岳普湖县| 鹿泉市| 察哈|