实现逻辑:
1. 外层IIFE,防止全局污染。携带root对象, factory函数,
2. 执行factory函数,携带模块库(modules),{key: values}键值对
3. 定义内部模块库,公用加载函数__webpack_require__,注册后绑定当前模块、公用加载函数,下次调用直接返回模块
4. 初始化全局属性、对外抛出构建对象
5. 通用模块注册(挂载到全局)
Tips: 内附流程图,配合食用更佳哦~
;(function webpackUniversalModuleDefinition(root, factory) {
// Webpack通用模块定义
if (typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if (typeof define === 'function' && define.amd)
define([], factory);
else if (typeof exports === 'object')
exports["Mock"] = factory();
else
root["Mock"] = factory();
})(this, function factory() {
return (function (modules) {
var installedModules = {};
// 公用加载函数
// 模块注册后绑定module、__webpack_require__
function __webpack_require__(moduleId) {
if(installedModules[moduleId])
return installedModules[moduleId].exports;
var module = installedModules[moduleId] = {
exports: {},
id: moduleId,
loaded: false
};
// 携带当前库、加载函数
modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
module.loaded = true;
return module.exports;
}
return __webpack_require__('init'); // 初始化构建
})({
// 初始化插件、对外抛出
init: function (module, exports, __webpack_require__) {
var utils = __webpack_require__('utils');
var Mock = {
_toString: utils.toString,
}
module.exports = Mock
}
, utils: function (module, exports, __webpack_require__) {
module.exports = {
toString: __webpack_require__('handle')
}
}
, handle: function (module, exports, __webpack_require__) {
module.exports = function (target) {
return target.toString()
}
}
})
});
console.log(Mock._toString(["1", "2", "3"]));
简单实现,以讲述模块化的一些核心理念,如有不足之处,多多担待,给点宝贵意见更好啦0.0