国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

Webpack優化配置縮小文件搜索范圍

2024-05-06 15:23:13
字體:
來源:轉載
供稿:網友

Webpack 啟動后會從配置的 Entry 出發,解析出文件中的導入語句,再遞歸的解析。

在遇到導入語句時 Webpack 會做兩件事情:

1.根據導入語句去尋找對應的要導入的文件。例如 require('react') 導入語句對應的文件是 ./node_modules/react/react.js , require('./util') 對應的文件是 ./util.js 。

2.根據找到的要導入文件的后綴,使用配置中的 Loader 去處理文件。例如使用 ES6 開發的 JavaScript 文件需要使用 babel-loader 去處理。

以上兩件事情雖然對于處理一個文件非常快,但是當項目大了以后文件量會變的非常多,這時候構建速度慢的問題就會暴露出來。

雖然以上兩件事情無法避免,但需要盡量減少以上兩件事情的發生,以提高速度。

接下來一一介紹可以優化它們的途徑。

優化 loader 配置

由于 Loader 對文件的轉換操作很耗時,需要讓盡可能少的文件被 Loader 處理。

在 2-3 Module 中介紹過在使用 Loader 時可以通過 test 、 include 、 exclude 三個配置項來命中 Loader 要應用規則的文件。

為了盡可能少的讓文件被 Loader 處理,可以通過 include 去命中只有哪些文件需要被處理。

以采用 ES6 的項目為例,在配置 babel-loader 時,可以這樣:

module.exports = { module: {  rules: [   {    // 如果項目源碼中只有 js 文件就不要寫成 //.jsx?$/,提升正則表達式性能    test: //.js$/,    // babel-loader 支持緩存轉換出的結果,通過 cacheDirectory 選項開啟    use: ['babel-loader?cacheDirectory'],    // 只對項目根目錄下的 src 目錄中的文件采用 babel-loader    include: path.resolve(__dirname, 'src'),   },  ] },};

你可以適當的調整項目的目錄結構,以方便在配置 Loader 時通過 include 去縮小命中范圍。

優化 resolve.modules 配置

在 2-4 Resolve 中介紹過 resolve.modules 用于配置 Webpack 去哪些目錄下尋找第三方模塊。

resolve.modules 的默認值是 ['node_modules'] ,含義是先去當前目錄下的 ./node_modules 目錄下去找想找的模塊,如果沒找到就去上一級目錄 ../node_modules 中找,再沒有就去 ../../node_modules 中找,以此類推,這和 Node.js 的模塊尋找機制很相似。

當安裝的第三方模塊都放在項目根目錄下的 ./node_modules 目錄下時,沒有必要按照默認的方式去一層層的尋找,可以指明存放第三方模塊的絕對路徑,以減少尋找,配置如下:

module.exports = { resolve: {  // 使用絕對路徑指明第三方模塊存放的位置,以減少搜索步驟  // 其中 __dirname 表示當前工作目錄,也就是項目根目錄  modules: [path.resolve(__dirname, 'node_modules')] },};

優化 resolve.mainFields 配置

在 2-4 Resolve 中介紹過 resolve.mainFields 用于配置第三方模塊使用哪個入口文件。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 抚顺市| 长乐市| 吴桥县| 嘉鱼县| 石柱| 环江| 泸水县| 寻乌县| 忻城县| 如皋市| 永福县| 耒阳市| 胶南市| 教育| 象州县| 樟树市| 扬中市| 淄博市| 合山市| 察隅县| 瑞安市| 铜陵市| 德格县| 客服| 绥芬河市| 金塔县| 疏附县| 汾西县| 东辽县| 凉城县| 额敏县| 浦北县| 磐石市| 军事| 普宁市| 五寨县| 闽清县| 桦川县| 德兴市| 平山县| 云和县|