æ¬ç« èæ¶µçäºä½¿ç¨ webpack ç¼è¯ç代ç 䏿æçåéãæ¨¡åå°éè¿ module åå
¶ä»åéï¼æ¥è®¿é®ç¼è¯è¿ç¨ä¸çæäºæ°æ®ã
false è¡¨ç¤ºè¯¥æ¨¡åæ£å¨æ§è¡ï¼ true è¡¨ç¤ºåæ¥æ§è¡å·²ç»å®æã
表示 模åçæ¿æ¢(Hot Module Replacement) æ¯å¦å¯ç¨ï¼å¹¶ç»è¿ç¨æä¾ä¸ä¸ªæ¥å£ã详ç»è¯´æè¯·æ¥ç 模åçæ¿æ¢ API 页é¢ã
å½å模åç IDã
module.id === require.resolve('./file.js');è°ç¨è
éè¿ require 对模åè¿è¡è°ç¨æ¶è¿åçå¼ï¼é»è®¤ä¸ºä¸ä¸ªæ°å¯¹è±¡ï¼ã
module.exports = function doSomething() {
// Do something...
};该åéé»è®¤å¼ä¸º module.exportsï¼å³ä¸ä¸ªå¯¹è±¡ï¼ã 妿 module.exports 被éåçè¯ï¼ exports ä¸åä¼è¢«å¯¼åºã
exports.someValue = 42;
exports.anObject = {
x: 123,
};
exports.aFunction = function doSomething() {
// Do something
};è§ node.js global.
åºäºå
¼å®¹æ§èèï¼webpack é»è®¤å¡«å
äº global åéã
åå³äº node.__dirname é
ç½®é项ï¼
false: æªå®ä¹mock: çåäº '/'true: node.js __dirname妿å¨ä¸ä¸ªè¢« Parser è§£æç表达å¼å
é¨ä½¿ç¨ï¼åé
ç½®é项ä¼è¢«å½ä½ true å¤çã
è¿å模å以 file: å¼å¤´ç»å¯¹è·¯å¾ç URLã
src/index.js
console.log(import.meta.url); // è¾åºç»æç±»ä¼¼äº `file:///path/to/your/project/src/index.js`è¿å webpack ççæ¬
src/index.js
console.log(import.meta.webpack); // output `5` for webpack 5webpack ç¹å®ãmodule.hot çä¸ä¸ªå«åï¼strict ESM ä¸å¯ä»¥ä½¿ç¨ import.meta.webpackHot 使¯ä¸è½ä½¿ç¨ module.hotã
è¿åä¸ require.context 䏿 ·çå¼ï¼ä½æ¯ä»
ç¨äº javascript/auto å javascript/esmã
ç±»åï¼
(
request: string,
options?: {
recursive?: boolean;
regExp?: RegExp;
include?: RegExp;
exclude?: RegExp;
preload?: boolean | number;
prefetch?: boolean | number;
chunkName?: string;
exports?: string | string[][];
mode?: 'sync' | 'eager' | 'weak' | 'lazy' | 'lazy-once';
}
) => webpack.Context;å¯ç¨çæ¬ï¼5.70.0+
示ä¾ï¼
const contextRequire = import.meta.webpackContext('.', {
recursive: false,
regExp: /two/,
mode: 'weak',
exclude: /three/,
});åå³äº node.__filename é
ç½®é项ï¼
false: æªå®ä¹mock: çåäº '/index.js'true: node.js __filename妿å¨ä¸ä¸ªè¢« Parser è§£æç表达å¼å
é¨ä½¿ç¨ï¼åé
ç½®é项ä¼è¢«å½ä½ true å¤çã
å½å模åçèµæºæ¥è¯¢(resource query) ã妿è¿è¡äºå¦ä¸ç reqiure è°ç¨ï¼é£ä¹æ¥è¯¢å符串(query string)å¨file.js ä¸å¯è®¿é®ã
require('file.js?test');file.js
__resourceQuery === '?test';çåäº output.publicPath é
ç½®é项ã
åå§ require 彿°ãè¿ä¸ªè¡¨è¾¾å¼ä¸ä¼è¢«è§£æå¨è§£æä¸ºä¾èµã
__webpack_chunk_load__ (webpack-specific)å é¨ chunk è½½å ¥å½æ°ï¼æä¸ä¸ªè¾å ¥åæ°ï¼
chunkId éè¦è½½å
¥ç chunk idãå½ä¸ä¸ª chunk å 载失败æ¶ï¼ä»å¤ç¨å ¬å ±è·¯å¾å è½½ chunk ç示ä¾ï¼
const originalLoad = __webpack_chunk_load__;
const publicPaths = ['a', 'b', 'c'];
__webpack_chunk_load__ = async (id) => {
let error;
for (const path of publicPaths) {
__webpack_public_path__ = path;
try {
return await originalLoad(id);
} catch (e) {
error = e;
}
}
throw error;
};
import('./module-a').then((moduleA) => {
// now webpack will use the custom __webpack_chunk_load__ to load chunk
});宿ä¾å¯¹å½å module ç访é®ãmodule å¨ ESM ä¸¥æ ¼æ¨¡å¼ä¸ä¸å¯ç¨ã
宿ä¾å¯¹å½å module(module.id) ID ç访é®ãmodule å¨ ESM ä¸¥æ ¼æ¨¡å¼ä¸ä¸å¯ç¨ã
è®¿é®æææ¨¡åçå é¨å¯¹è±¡ã
è¿ä¸ªåéæä¾å¯¹ç¼è¯è¿ç¨ä¸(compilation)ç hash ä¿¡æ¯ç访é®ã
function (chunkId)
å®éè¿ chunk ç id æä¾ chunk çæä»¶åã
宿¯å¯åé çï¼å è®¸æ´æ¹è¿è¡æ¶ä½¿ç¨çæä»¶åãä¾å¦ï¼å®å¯ä»¥ç¨æ¥ç¡®å®å è½½ chunk æ¶çæç»è·¯å¾ã
const oldFn = __webpack_get_script_filename__;
__webpack_get_script_filename__ = (chunkId) => {
const filename = oldFn(chunkId);
return filename + '.changed';
};çæä¸ä¸ªä¸ä¼è¢« webpack è§£æç require 彿°ãé
åå
¨å±å¯ä»¥è·åå°ç require 彿°ï¼å¯ä»¥å®æä¸äºé
·ç«æä½ã
卿¨¡åä¸, __webpack_exports_info__ å¯ä»¥è¢«è·åå°ï¼ä»¥ä¾¿å¯¼åºæ¨¡åç¨ä»¥èªææ£æ¥ï¼
__webpack_exports_info__ æ»æ¯ true
å½å¯¼åºæ¨¡åæªè¢«ä½¿ç¨æ¶ __webpack_exports_info__.<exportName>.used 为 false, å¦åæ¯ true
__webpack_exports_info__.<exportName>.useInfo æ¯
false å½å¯¼åºæ¨¡åæªè¢«ä½¿ç¨true å½å¯¼åºæ¨¡å被使ç¨null å½å¯¼åºæ¨¡åçä½¿ç¨æ
åµåå³äºè¿è¡æ¶çæ¡ä»¶undefined 彿²¡æå¯ç¨ä¿¡æ¯æ¶__webpack_exports_info__.<exportName>.provideInfo æ¯
false å½å¯¼åºæ¨¡å没æè¢«æä¾true å½å¯¼åºæ¨¡å被æä¾null å½å¯¼åºæ¨¡åçæä¾æ
åµåå³äºè¿è¡æ¶çæ¡ä»¶undefined 彿²¡æå¯ç¨ä¿¡æ¯æ¶å¯ä»¥ä»åµå¥ç exports ä¸å¾å°ç¸å
³ä¿¡æ¯: ä¾å¦ __webpack_exports_info__.<exportName>.<exportName>.<exportName>.used
Check whether exports can be mangled with __webpack_exports_info__.<name>.canMangle
æµè¯ç»å®çæ¨¡åæ¯å¦è¢« webpack æå ã
if (__webpack_is_included__('./module-a.js')) {
// do something
}è¿è¡æ¶ä¿®æ¹ base ç URIã
ç±»åï¼string
å¯ç¨ï¼5.21.0+
示ä¾:
__webpack_base_uri__ = 'https://example.com';访é®å½åå ¥å£ç runtime idã
è¿æ¯ä¸ä¸ª webpack ç¹æ§ï¼å¹¶ä¸å¨ webpack 5.25.0 åå¯ç¨ã
src/index.js
console.log(__webpack_runtime_id__ === 'main');çåäº debug é
ç½®é项ã