国产chinesehdxxxx野外,国产av无码专区亚洲av琪琪,播放男人添女人下边视频,成人国产精品一区二区免费看,chinese丰满人妻videos

Webpack 依賴管理

2023-05-17 18:09 更新
es6 modules
commonjs
amd

帶表達(dá)式的 require 語句

如果你的 request 含有表達(dá)式(expressions),就會創(chuàng)建一個上下文(context),因為在編譯時(compile time)并不清楚 具體 導(dǎo)入哪個模塊。

示例,考慮到我們有包含 ?.ejs? 文件的如下目錄結(jié)構(gòu):

example_directory
│
└───template
│   │   table.ejs
│   │   table-row.ejs
│   │
│   └───directory
│       │   another.ejs

當(dāng)臺下的 require() 調(diào)用被評估解析:

require('./template/' + name + '.ejs');

webpack 解析 ?require()? 調(diào)用,然后提取出如下一些信息:

Directory: ./template
Regular expression: /^.*\.ejs$/

context module

會生成一個 context module(上下文模塊)。它包含 目錄下的所有模塊 的引用,如果一個 request 符合正則表達(dá)式,就能 require 進(jìn)來。該 context module 包含一個 map(映射)對象,會把 requests 翻譯成對應(yīng)的模塊 id。

示例 map(映射):

{
  "./table.ejs": 42,
  "./table-row.ejs": 43,
  "./directory/another.ejs": 44
}

此 context module 還包含一些訪問這個 map 對象的 runtime 邏輯。

這意味著 webpack 能夠支持動態(tài)地 require,但會導(dǎo)致所有可能用到的模塊都包含在 bundle 中。

require.context

你還可以通過 ?require.context()? 函數(shù)來創(chuàng)建自己的 context。

可以給這個函數(shù)傳入三個參數(shù):一個要搜索的目錄,一個標(biāo)記表示是否還搜索其子目錄, 以及一個匹配文件的正則表達(dá)式。

Webpack 會在構(gòu)建中解析代碼中的 ?require.context()? 。

語法如下:

require.context(
  directory,
  (useSubdirectories = true),
  (regExp = /^\.\/.*$/),
  (mode = 'sync')
);

示例:

require.context('./test', false, /\.test\.js$/);
//(創(chuàng)建出)一個 context,其中文件來自 test 目錄,request 以 `.test.js` 結(jié)尾。
require.context('../', true, /\.stories\.js$/);
// (創(chuàng)建出)一個 context,其中所有文件都來自父文件夾及其所有子級文件夾,request 以 `.stories.js` 結(jié)尾。

context module API

一個 context module 會導(dǎo)出一個(require)函數(shù),此函數(shù)可以接收一個參數(shù):request。

此導(dǎo)出函數(shù)有三個屬性:resolve, keys, id。

  • ?resolve? 是一個函數(shù),它返回 request 被解析后得到的模塊 id。
  • ?keys? 也是一個函數(shù),它返回一個數(shù)組,由所有可能被此 context module 處理的請求(參考下面第二段代碼中的 key)組成。

如果想引入一個文件夾下面的所有文件,或者引入能匹配一個正則表達(dá)式的所有文件,這個功能就會很有幫助,例如:

function importAll(r) {
  r.keys().forEach(r);
}

importAll(require.context('../components/', true, /\.js$/));
const cache = {};

function importAll(r) {
  r.keys().forEach((key) => (cache[key] = r(key)));
}

importAll(require.context('../components/', true, /\.js$/));
// 在構(gòu)建時(build-time),所有被 require 的模塊都會被填充到 cache 對象中。
  • id 是 context module 的模塊 id. 它可能在你使用 ?module.hot.accept? 時會用到。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號