作用
- 在处理文件的过程中,通过loader生成一个额外的module,该module不是源文件中真实存在的文件,但会被webpack打包生成出来
- 比如expose-loader中通过生成一个额外的module来导入原始module的内容,然后将导入内容挂载到全局,再导出原始module的导出
使用
- 核心是使用this._module.userRequest,该API 可读可写,读返回原始文件的绝对路径,写入新的路径webpack会生成一个新的module
- 相关可配合的API
- 返回文件的相对路径:this.utils.contextify(this.context, this.remainingRequest)
webpack
{
test:/o4.js$/,
use:[
{
loader:'load',
}
]
}
loader
- 当处理原始文件’o4.js’时,通过this._module.userRequest生成一个新的module,然后新的module会引入原始module模块
- 总体流程为:
- 在构建时,当源文件请求o4.js文件,loader匹配o4.js文件,生成的module会变成如下的code内容,当webpack开始处理code时,又会解析到"./o4.js"依赖,所以又会生成真实的o4.js的module
function load(source,map,meta){
const callback = this.async();
//额外生成this._module.userRequest+'ooo4.js'命名的module
this._module.userRequest = this._module.userRequest+'ooo4.js';
const code='import res from "-!./o4.js"; res();console.log("mm"); const f=function(){console.log("temp")}; export default f'
callback(null,code)
}
module.exports=load
构建后代码
(() => { // webpackBootstrap
var __webpack_modules__ = ({
"./src/o4.jsooo4.js":
((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
__webpack_require__.d(__webpack_exports__, {
"default": () => (__WEBPACK_DEFAULT_EXPORT__)
});
var _o4_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!./o4.js */ "./src/o4.js");
(0,_o4_js__WEBPACK_IMPORTED_MODULE_0__["default"])();
console.log("mm");
const f = function () {
console.log("temp");
};
const __WEBPACK_DEFAULT_EXPORT__ = (f);
}),
"./src/o4.js":
((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
__webpack_require__.d(__webpack_exports__, {
"default": () => (__WEBPACK_DEFAULT_EXPORT__)
});
function f4(){
console.log('044444')
}
const __WEBPACK_DEFAULT_EXPORT__ = (f4);
})
})
// ...
"use strict";
/*!**********************!*\
!*** ./src/index.js ***!
\**********************/
__webpack_require__.r(__webpack_exports__);
// ...
/* harmony import */ var _o4_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./o4.js */ "./src/o4.jsooo4.js");
// ...
(0,_o4_js__WEBPACK_IMPORTED_MODULE_3__["default"])();