webpack 本身维护了一套模块系统,这套模块系统兼容了所有前端历史进程下的模块规范,包括amd、commonjs、es6、amd等,本文主要针对commonjs、es6、amd规范进行说明。
module.exports
上,然后暴露给外界require
加载别的模块,require
的返回值就是模块暴露的对象可通过以下方式输出任何对模块内部的引用
export { A, B }
export { A as a, B }
export default A
export const A = { }
通过以下方式加载模块中输出的任意引用
import A from './module'
import * as A from './module'
import { A, B } from './module'
import { A as a, B } from './module'
ES6 module 是一个多对象输出,多对象加载的模型
{i:moduleId,//module的索引l:false,//是否是安装了,webpack会对module做缓存exports:{}//module的源代码,最终都会通过这个暴露出去}
(function (module, __webpack_exports__, __webpack_require__) {"use strict";__webpack_require__.r(__webpack_exports__);/* harmony default export */__webpack_exports__["default"] = (function (a, b) { return a + b; });/***/})
(function (module, __webpack_exports__, __webpack_require__) {"use strict";__webpack_require__.r(__webpack_exports__);/* harmony export (binding) */__webpack_require__.d(__webpack_exports__, "dsx", function () { return dsx; });function dsx() {console.log('dsx');}})
(function (module, __webpack_exports__, __webpack_require__) {"use strict";__webpack_require__.r(__webpack_exports__);/* harmony export (binding) */__webpack_require__.d(__webpack_exports__, "dsx", function () { return dsx; });/* harmony default export */__webpack_exports__["default"] = (function (a, b) {return a + b;});function dsx() {console.log('dsx');}})
module.exports = function (a, b) {return a - b;};// ------- 最后被编译的结果是原样输出(function (module, exports) {module.exports = function (a, b) {return a - b;};})
module.exports = function (a, b) {return a - b;};exports.dsx = function () { }// ------- 最后被编译的结果是原样输出(function (module, exports) {module.exports = function (a, b) {return a - b;};exports.dsx = function () { }})
define(function (require, factory) {"use strict";return function (a, b) {return a * b;};});// ------- 最后被编译的结果:(function (module, exports, __webpack_require__) {var __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_RESULT__ = (function (require, factory) {"use strict";return function (a, b) {return a * b;};}).call(exports, __webpack_require__, exports, module),__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));})
//__webpack_require__函数返回 module.exports// --------------------------------------------------------------------------------------------// import es6 from './es6'var _vendor_es6__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./es6 */ "./es6.js");_vendor_es6__WEBPACK_IMPORTED_MODULE_0__["default"] //使用// import {es6} from './es6'var _vendor_es6__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./es6 */ "./es6.js");_vendor_es6__WEBPACK_IMPORTED_MODULE_0__["es6"] //使用// import dsx, { dsx2 } from './vendor/es6';var _vendor_es6__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./es6 */ "./es6.js");console.log(_vendor_es6__WEBPACK_IMPORTED_MODULE_0__["default"]);console.log(_vendor_es6__WEBPACK_IMPORTED_MODULE_0__["dsx2"])// import * as dsx from './vendor/es6';var _vendor_es6__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./es6 */ "./es6.js");console.log(_vendor_es6__WEBPACK_IMPORTED_MODULE_0__);
import('./es6').then((show) => {show(1, 2);});// ------- 最后被编译的结果:__webpack_require__.e(/*! import() */ 0).then(__webpack_require__.bind(null, /*! ./es6 */ "./es6.js")).then((__webpack_exports__) => {//es6 其实就是 __webpack_exports__ 对象__webpack_exports__.default(1, 2);__webpack_exports__.dsx;});
var minus = require("./vendor/minus");console.log("minus(1, 2) = ", minus(1, 2));// ------- 最后被编译的结果:var minus = __webpack_require__(/*! ./vendor/common */ "./src/vendor/common.js");console.log("minus(1, 2) = ", minus(1, 2));
var minus = require("./vendor/common");console.log("minus(1, 2) = ", minus(1, 2));require.ensure(["./vendor/common"], function (minus) {console.log("minus(1, 2) require.ensure= ", minus(1, 2));}, 'dsx');// ------- 最后被编译的结果:(function (module, exports, __webpack_require__) {var minus = __webpack_require__(/*! ./vendor/common */ "./src/vendor/common.js");console.log("minus(1, 2) = ", minus(1, 2));Promise.resolve(/*! require.ensure */).then((function (minus) {console.log("minus(1, 2) require.ensure= ", minus(1, 2))}).bind(null, __webpack_require__)).catch(__webpack_require__.oe);})
require.ensure(["./vendor/common"], function (minus) {console.log("minus(1, 2) require.ensure= ", minus(1, 2));}, 'dsx');// ------- 最后被编译的结果:(function (module, exports, __webpack_require__) {__webpack_require__.e(/*! require.ensure | dsx */ "dsx").then((function (minus) {console.log("minus(1, 2) require.ensure= ", minus(1, 2));}).bind(null, __webpack_require__)).catch(__webpack_require__.oe);})
require(["./vendor/amd"], function (multi) {console.log("multi(1, 2) = ", multi(1, 2));});// ------- 最后被编译的结果:(function (module, exports, __webpack_require__) {__webpack_require__.e(/*! AMD require */ 0).then(function () {var __WEBPACK_AMD_REQUIRE_ARRAY__ = [__webpack_require__(/*! ./amd */ "./amd.js")];(function (multi) {console.log("multi(1, 2) = ", multi(1, 2));}).apply(null, __WEBPACK_AMD_REQUIRE_ARRAY__);}).catch(__webpack_require__.oe);})
import、require、export、module.exports详解