awesome-interview/assets/js/b948ee85.52c7e36a.js

1 line
28 KiB
JavaScript

"use strict";(self.webpackChunkjjbook=self.webpackChunkjjbook||[]).push([[6283],{3905:function(e,n,t){t.d(n,{Zo:function(){return m},kt:function(){return c}});var r=t(67294);function l(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function o(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?a(Object(t),!0).forEach((function(n){l(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):a(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function p(e,n){if(null==e)return{};var t,r,l=function(e,n){if(null==e)return{};var t,r,l={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(l[t]=e[t]);return l}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(l[t]=e[t])}return l}var i=r.createContext({}),u=function(e){var n=r.useContext(i),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},m=function(e){var n=u(e.components);return r.createElement(i.Provider,{value:n},e.children)},s={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},k=r.forwardRef((function(e,n){var t=e.components,l=e.mdxType,a=e.originalType,i=e.parentName,m=p(e,["components","mdxType","originalType","parentName"]),k=u(t),c=l,d=k["".concat(i,".").concat(c)]||k[c]||s[c]||a;return t?r.createElement(d,o(o({ref:n},m),{},{components:t})):r.createElement(d,o({ref:n},m))}));function c(e,n){var t=arguments,l=n&&n.mdxType;if("string"==typeof e||l){var a=t.length,o=new Array(a);o[0]=k;var p={};for(var i in n)hasOwnProperty.call(n,i)&&(p[i]=n[i]);p.originalType=e,p.mdxType="string"==typeof e?e:l,o[1]=p;for(var u=2;u<a;u++)o[u]=t[u];return r.createElement.apply(null,o)}return r.createElement.apply(null,t)}k.displayName="MDXCreateElement"},43240:function(e,n,t){t.r(n),t.d(n,{assets:function(){return m},contentTitle:function(){return i},default:function(){return c},frontMatter:function(){return p},metadata:function(){return u},toc:function(){return s}});var r=t(87462),l=t(63366),a=(t(67294),t(3905)),o=["components"],p={sidebar_label:"\u57fa\u7840\uff1a\u524d\u7aef\u6a21\u5757\u5316\u89c4\u8303",sidebar_position:7},i="\u524d\u7aef\u6a21\u5757\u5316\u89c4\u8303",u={unversionedId:"book1/js-module-specs",id:"book1/js-module-specs",title:"\u524d\u7aef\u6a21\u5757\u5316\u89c4\u8303",description:"\u76f8\u5173\u95ee\u9898",source:"@site/docs/book1/js-module-specs.md",sourceDirName:"book1",slug:"/book1/js-module-specs",permalink:"/awesome-interview/book1/js-module-specs",tags:[],version:"current",sidebarPosition:7,frontMatter:{sidebar_label:"\u57fa\u7840\uff1a\u524d\u7aef\u6a21\u5757\u5316\u89c4\u8303",sidebar_position:7},sidebar:"tutorialSidebar",previous:{title:"\u57fa\u7840\uff1a\u95ed\u5305\u7684\u4f5c\u7528\u548c\u539f\u7406",permalink:"/awesome-interview/book1/js-closures"},next:{title:"\u6837\u5f0f\uff1aBFC \u7684\u5f62\u6210\u548c\u4f5c\u7528",permalink:"/awesome-interview/book1/css-bfc"}},m={},s=[{value:"\u76f8\u5173\u95ee\u9898",id:"\u76f8\u5173\u95ee\u9898",level:2},{value:"\u56de\u7b54\u5173\u952e\u70b9",id:"\u56de\u7b54\u5173\u952e\u70b9",level:2},{value:"\u77e5\u8bc6\u70b9\u6df1\u5165",id:"\u77e5\u8bc6\u70b9\u6df1\u5165",level:2},{value:"1. \u4e3a\u4ec0\u4e48\u9700\u8981\u6a21\u5757\u5316\u548c\u6a21\u5757\u5316\u89c4\u8303",id:"1-\u4e3a\u4ec0\u4e48\u9700\u8981\u6a21\u5757\u5316\u548c\u6a21\u5757\u5316\u89c4\u8303",level:3},{value:"2. \u5404\u79cd\u6a21\u5757\u5316\u89c4\u8303\u7684\u7ec6\u8282",id:"2-\u5404\u79cd\u6a21\u5757\u5316\u89c4\u8303\u7684\u7ec6\u8282",level:3},{value:"2.1 CommonJS",id:"21-commonjs",level:4},{value:"2.2 AMD (Asynchronous Module Definition)",id:"22-amd-asynchronous-module-definition",level:4},{value:"2.3 CMD (Common Module Definition)",id:"23-cmd-common-module-definition",level:4},{value:"2.4 UMD (Universal Module Definition)",id:"24-umd-universal-module-definition",level:4},{value:"2.5 ESM (ECMAScript Module)",id:"25-esm-ecmascript-module",level:4},{value:"\u6269\u5c55\u9605\u8bfb",id:"\u6269\u5c55\u9605\u8bfb",level:2},{value:"1. \u9759\u6001\u5206\u6790",id:"1-\u9759\u6001\u5206\u6790",level:3},{value:"2. \u6a21\u5757\u5316\u4e0e\u5de5\u7a0b\u5316\uff1awebpack",id:"2-\u6a21\u5757\u5316\u4e0e\u5de5\u7a0b\u5316webpack",level:3},{value:"3. \u6a21\u5757\u5316\u4e0e\u5de5\u7a0b\u5316\uff1aTree Shaking",id:"3-\u6a21\u5757\u5316\u4e0e\u5de5\u7a0b\u5316tree-shaking",level:3},{value:"\u53c2\u8003\u8d44\u6599",id:"\u53c2\u8003\u8d44\u6599",level:2}],k={toc:s};function c(e){var n=e.components,t=(0,l.Z)(e,o);return(0,a.kt)("wrapper",(0,r.Z)({},k,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"\u524d\u7aef\u6a21\u5757\u5316\u89c4\u8303"},"\u524d\u7aef\u6a21\u5757\u5316\u89c4\u8303"),(0,a.kt)("h2",{id:"\u76f8\u5173\u95ee\u9898"},"\u76f8\u5173\u95ee\u9898"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"JavaScript \u4e3b\u8981\u6709\u54ea\u51e0\u79cd\u6a21\u5757\u5316\u89c4\u8303"),(0,a.kt)("li",{parentName:"ul"},"AMD / CMD \u6709\u4ec0\u4e48\u5f02\u540c"),(0,a.kt)("li",{parentName:"ul"},"ESM \u662f\u4ec0\u4e48"),(0,a.kt)("li",{parentName:"ul"},"\u6a21\u5757\u5316\u89e3\u51b3\u4e86\u4ec0\u4e48\u95ee\u9898/\u75db\u70b9")),(0,a.kt)("h2",{id:"\u56de\u7b54\u5173\u952e\u70b9"},"\u56de\u7b54\u5173\u952e\u70b9"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"CommonJS")," ",(0,a.kt)("inlineCode",{parentName:"p"},"AMD")," ",(0,a.kt)("inlineCode",{parentName:"p"},"CMD")," ",(0,a.kt)("inlineCode",{parentName:"p"},"UMD")," ",(0,a.kt)("inlineCode",{parentName:"p"},"ESM")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"CommonJS",(0,a.kt)("sup",null,"[1]"),": \u4e3b\u8981\u662f ",(0,a.kt)("strong",{parentName:"li"},"Node.js")," \u4f7f\u7528\uff0c\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"li"},"require")," ",(0,a.kt)("strong",{parentName:"li"},"\u540c\u6b65"),"\u52a0\u8f7d\u6a21\u5757\uff0c",(0,a.kt)("inlineCode",{parentName:"li"},"exports")," \u5bfc\u51fa\u5185\u5bb9\u3002"),(0,a.kt)("li",{parentName:"ul"},"AMD",(0,a.kt)("sup",null,"[2]"),": \u4e3b\u8981\u662f",(0,a.kt)("strong",{parentName:"li"},"\u6d4f\u89c8\u5668\u7aef"),"\u4f7f\u7528\uff0c\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"li"},"define")," \u5b9a\u4e49\u6a21\u5757\u548c\u4f9d\u8d56\uff0c",(0,a.kt)("inlineCode",{parentName:"li"},"require")," ",(0,a.kt)("strong",{parentName:"li"},"\u5f02\u6b65"),"\u52a0\u8f7d\u6a21\u5757\uff0c\u63a8\u5d07",(0,a.kt)("strong",{parentName:"li"},"\u4f9d\u8d56\u524d\u7f6e"),"\u3002"),(0,a.kt)("li",{parentName:"ul"},"CMD",(0,a.kt)("sup",null,"[3]"),": \u548c AMD \u6bd4\u8f83\u7c7b\u4f3c\uff0c\u4e3b\u8981\u662f",(0,a.kt)("strong",{parentName:"li"},"\u6d4f\u89c8\u5668\u7aef"),"\u4f7f\u7528\uff0c\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"li"},"require")," ",(0,a.kt)("strong",{parentName:"li"},"\u5f02\u6b65"),"\u52a0\u8f7d\u6a21\u5757\uff0c",(0,a.kt)("inlineCode",{parentName:"li"},"exports")," \u5bfc\u51fa\u5185\u5bb9\uff0c\u63a8\u5d07",(0,a.kt)("strong",{parentName:"li"},"\u4f9d\u8d56\u5c31\u8fd1"),"\u3002"),(0,a.kt)("li",{parentName:"ul"},"UMD",(0,a.kt)("sup",null,"[4]"),": \u901a\u7528\u6a21\u5757\u89c4\u8303\uff0c\u662f CommonJS\u3001AMD \u4e24\u4e2a\u89c4\u8303\u7684\u5927\u878d\u5408\uff0c\u662f",(0,a.kt)("strong",{parentName:"li"},"\u8de8\u5e73\u53f0"),"\u7684\u89e3\u51b3\u65b9\u6848\u3002"),(0,a.kt)("li",{parentName:"ul"},"ESM",(0,a.kt)("sup",null,"[5]"),": \u5b98\u65b9\u6a21\u5757\u5316\u89c4\u8303\uff0c",(0,a.kt)("strong",{parentName:"li"},"\u73b0\u4ee3\u6d4f\u89c8\u5668\u539f\u751f\u652f\u6301"),"\uff0c\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"li"},"import")," ",(0,a.kt)("strong",{parentName:"li"},"\u5f02\u6b65"),"\u52a0\u8f7d\u6a21\u5757\uff0c",(0,a.kt)("inlineCode",{parentName:"li"},"export")," \u5bfc\u51fa\u5185\u5bb9\u3002")),(0,a.kt)("h2",{id:"\u77e5\u8bc6\u70b9\u6df1\u5165"},"\u77e5\u8bc6\u70b9\u6df1\u5165"),(0,a.kt)("h3",{id:"1-\u4e3a\u4ec0\u4e48\u9700\u8981\u6a21\u5757\u5316\u548c\u6a21\u5757\u5316\u89c4\u8303"},"1. \u4e3a\u4ec0\u4e48\u9700\u8981\u6a21\u5757\u5316\u548c\u6a21\u5757\u5316\u89c4\u8303"),(0,a.kt)("p",null,"\u6a21\u5757\u5316\u53ef\u4ee5\u89e3\u51b3\u4ee3\u7801\u4e4b\u95f4\u7684\u53d8\u91cf\u3001\u51fd\u6570\u3001\u5bf9\u8c61\u7b49\u547d\u540d\u7684",(0,a.kt)("strong",{parentName:"p"},"\u51b2\u7a81/\u6c61\u67d3"),"\u95ee\u9898\uff0c\u826f\u597d\u7684\u6a21\u5757\u5316\u8bbe\u8ba1\u53ef\u4ee5",(0,a.kt)("strong",{parentName:"p"},"\u964d\u4f4e\u4ee3\u7801\u4e4b\u95f4\u7684\u8026\u5408\u5173\u7cfb"),"\uff0c\u63d0\u9ad8\u4ee3\u7801\u7684\u53ef\u7ef4\u62a4\u6027\u3001\u53ef\u6269\u5c55\u6027\u4ee5\u53ca\u590d\u7528\u6027\u3002"),(0,a.kt)("p",null,"\u6a21\u5757\u5316\u89c4\u8303\u7684\u4f5c\u7528\u662f\u4e3a\u4e86\u89c4\u8303 JavaScript \u6a21\u5757\u7684\u5b9a\u4e49\u548c\u52a0\u8f7d\u673a\u5236\uff0c\u4ee5\u7edf\u4e00\u7684\u65b9\u5f0f\u5bfc\u51fa\u548c\u52a0\u8f7d\u6a21\u5757\uff0c\u964d\u4f4e\u5b66\u4e60\u4f7f\u7528\u6210\u672c\uff0c\u63d0\u9ad8\u5f00\u53d1\u6548\u7387\u3002"),(0,a.kt)("h3",{id:"2-\u5404\u79cd\u6a21\u5757\u5316\u89c4\u8303\u7684\u7ec6\u8282"},"2. \u5404\u79cd\u6a21\u5757\u5316\u89c4\u8303\u7684\u7ec6\u8282"),(0,a.kt)("h4",{id:"21-commonjs"},"2.1 CommonJS"),(0,a.kt)("p",null,"CommonJS \u4e3b\u8981\u662f ",(0,a.kt)("strong",{parentName:"p"},"Node.js")," \u4f7f\u7528\uff0c\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"p"},"require")," ",(0,a.kt)("strong",{parentName:"p"},"\u540c\u6b65"),"\u52a0\u8f7d\u6a21\u5757\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"exports")," \u5bfc\u51fa\u5185\u5bb9\u3002\u5728 CommonJS \u89c4\u8303\u4e0b\uff0c\u6bcf\u4e00\u4e2a JS \u6587\u4ef6\u90fd\u662f\u72ec\u7acb\u7684\u6a21\u5757\uff0c\u6bcf\u4e2a\u6a21\u5757\u90fd\u6709\u72ec\u7acb\u7684\u4f5c\u7528\u57df\uff0c\u6a21\u5757\u91cc\u7684\u672c\u5730\u53d8\u91cf\u90fd\u662f\u79c1\u6709\u7684\u3002"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u793a\u4f8b")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-javascript"},'// hzfe.js\nconst hzfeMember = 17;\nconst getHZFEMember = () => {\n return `HZFE Member: ${hzfeMember}`;\n};\nmodule.exports.getHZFEMember = getHZFEMember;\n\n// index.js\nconst hzfe = require("./hzfe.js");\nconsole.log(hzfe.getHZFEMember()); // HZFE Member: 17\n')),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u4f7f\u7528\u573a\u666f")),(0,a.kt)("p",null,"CommonJS \u4e3b\u8981\u5728\u670d\u52a1\u7aef\uff08\u5982\uff1aNode.js\uff09\u4f7f\u7528\uff0c\u4e5f\u53ef\u901a\u8fc7\u6253\u5305\u5de5\u5177\u6253\u5305\u4e4b\u540e\u5728\u6d4f\u89c8\u5668\u7aef\u4f7f\u7528\u3002"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u52a0\u8f7d\u65b9\u5f0f")),(0,a.kt)("p",null,"CommonJS \u901a\u8fc7\u540c\u6b65\u7684\u65b9\u5f0f\u52a0\u8f7d\u6a21\u5757\uff0c\u9996\u6b21\u52a0\u8f7d\u4f1a\u7f13\u5b58\u7ed3\u679c\uff0c\u540e\u7eed\u52a0\u8f7d\u5219\u662f\u76f4\u63a5\u8bfb\u53d6\u7f13\u5b58\u7ed3\u679c\u3002"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u4f18\u7f3a\u70b9")),(0,a.kt)("p",null,"\u4f18\u70b9"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u7b80\u5355\u6613\u7528"),(0,a.kt)("li",{parentName:"ul"},"\u53ef\u4ee5\u5728\u4efb\u610f\u4f4d\u7f6e ",(0,a.kt)("inlineCode",{parentName:"li"},"require")," \u6a21\u5757"),(0,a.kt)("li",{parentName:"ul"},"\u652f\u6301\u5faa\u73af\u4f9d\u8d56")),(0,a.kt)("p",null,"\u7f3a\u70b9"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u540c\u6b65\u7684\u52a0\u8f7d\u65b9\u5f0f\u4e0d\u9002\u7528\u4e8e\u6d4f\u89c8\u5668\u7aef"),(0,a.kt)("li",{parentName:"ul"},"\u6d4f\u89c8\u5668\u7aef\u4f7f\u7528\u9700\u8981\u6253\u5305"),(0,a.kt)("li",{parentName:"ul"},"\u96be\u4ee5\u652f\u6301\u6a21\u5757\u9759\u6001\u5206\u6790")),(0,a.kt)("h4",{id:"22-amd-asynchronous-module-definition"},"2.2 AMD (Asynchronous Module Definition)"),(0,a.kt)("p",null,"AMD\uff0c\u5373\u5f02\u6b65\u6a21\u5757\u5b9a\u4e49\u3002AMD \u5b9a\u4e49\u4e86\u4e00\u5957 JavaScript \u6a21\u5757\u4f9d\u8d56\u5f02\u6b65\u52a0\u8f7d\u6807\u51c6\uff0c\u7528\u6765\u89e3\u51b3\u6d4f\u89c8\u5668\u7aef\u6a21\u5757\u52a0\u8f7d\u7684\u95ee\u9898\u3002AMD \u4e3b\u8981\u662f",(0,a.kt)("strong",{parentName:"p"},"\u6d4f\u89c8\u5668\u7aef"),"\u4f7f\u7528\uff0c\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"p"},"define")," \u5b9a\u4e49\u6a21\u5757\u548c\u4f9d\u8d56\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"require")," ",(0,a.kt)("strong",{parentName:"p"},"\u5f02\u6b65"),"\u52a0\u8f7d\u6a21\u5757\uff0c\u63a8\u5d07",(0,a.kt)("strong",{parentName:"p"},"\u4f9d\u8d56\u524d\u7f6e"),"\u3002"),(0,a.kt)("p",null,"AMD \u6a21\u5757\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"p"},"define")," \u51fd\u6570\u5b9a\u4e49\u5728\u95ed\u5305\u4e2d\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-typescript"},"/**\n * define\n * @param id \u6a21\u5757\u540d\n * @param dependencies \u4f9d\u8d56\u5217\u8868\n * @param factory \u6a21\u5757\u7684\u5177\u4f53\u5185\u5bb9/\u5177\u4f53\u5b9e\u73b0\n */\ndefine(id?: string, dependencies?: string[], factory: Function | Object);\n")),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u793a\u4f8b")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-javascript"},'// hzfe.js\ndefine("hzfe", [], function () {\n const hzfeMember = 17;\n const getHZFEMember = () => {\n return `HZFE Member: ${hzfeMember}`;\n };\n\n return {\n getHZFEMember,\n };\n});\n\n// index.js\nrequire(["hzfe"], function (hzfe) {\n // \u4f9d\u8d56\u524d\u7f6e\n console.log(hzfe.getHZFEMember()); // HZFE Member: 17\n});\n')),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u4f7f\u7528\u573a\u666f")),(0,a.kt)("p",null,"AMD \u4e3b\u8981\u5728",(0,a.kt)("strong",{parentName:"p"},"\u6d4f\u89c8\u5668\u7aef"),"\u4e2d\u4f7f\u7528\uff0c\u901a\u8fc7\u7b26\u5408 AMD \u6807\u51c6\u7684 JavaScript \u5e93\uff08\u5982\uff1aRequireJs\uff09\u52a0\u8f7d\u6a21\u5757\u3002"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u52a0\u8f7d\u65b9\u5f0f")),(0,a.kt)("p",null,"AMD \u901a\u8fc7\u5f02\u6b65\u7684\u65b9\u5f0f\u52a0\u8f7d\u6a21\u5757\uff0c\u6bcf\u52a0\u8f7d\u4e00\u4e2a\u6a21\u5757\u5b9e\u9645\u5c31\u662f\u52a0\u8f7d\u5bf9\u5e94\u7684 JS \u6587\u4ef6\u3002"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u4f18\u7f3a\u70b9")),(0,a.kt)("p",null,"\u4f18\u70b9"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u4f9d\u8d56\u5f02\u6b65\u52a0\u8f7d\uff0c\u66f4\u5feb\u7684\u542f\u52a8\u901f\u5ea6"),(0,a.kt)("li",{parentName:"ul"},"\u652f\u6301\u5faa\u73af\u4f9d\u8d56"),(0,a.kt)("li",{parentName:"ul"},"\u652f\u6301\u63d2\u4ef6")),(0,a.kt)("p",null,"\u7f3a\u70b9"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u8bed\u6cd5\u76f8\u5bf9\u590d\u6742"),(0,a.kt)("li",{parentName:"ul"},"\u4f9d\u8d56\u52a0\u8f7d\u5668"),(0,a.kt)("li",{parentName:"ul"},"\u96be\u4ee5\u652f\u6301\u6a21\u5757\u9759\u6001\u5206\u6790")),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u5177\u4f53\u5b9e\u73b0")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://requirejs.org/"},"RequireJs"))),(0,a.kt)("h4",{id:"23-cmd-common-module-definition"},"2.3 CMD (Common Module Definition)"),(0,a.kt)("p",null,"CMD\uff0c\u5373\u901a\u7528\u6a21\u5757\u5b9a\u4e49\u3002CMD \u5b9a\u4e49\u4e86\u4e00\u5957 JavaScript \u6a21\u5757\u4f9d\u8d56\u5f02\u6b65\u52a0\u8f7d\u6807\u51c6\uff0c\u7528\u6765\u89e3\u51b3\u6d4f\u89c8\u5668\u7aef\u6a21\u5757\u52a0\u8f7d\u7684\u95ee\u9898\u3002CMD \u4e3b\u8981\u662f",(0,a.kt)("strong",{parentName:"p"},"\u6d4f\u89c8\u5668\u7aef"),"\u4f7f\u7528\uff0c\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"p"},"define")," \u5b9a\u4e49\u6a21\u5757\u548c\u4f9d\u8d56\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"require")," ",(0,a.kt)("strong",{parentName:"p"},"\u5f02\u6b65"),"\u52a0\u8f7d\u6a21\u5757\uff0c\u63a8\u5d07",(0,a.kt)("strong",{parentName:"p"},"\u4f9d\u8d56\u5c31\u8fd1"),"\u3002"),(0,a.kt)("p",null,"CMD \u6a21\u5757\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"p"},"define")," \u51fd\u6570\u5b9a\u4e49\u5728\u95ed\u5305\u4e2d\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-typescript"},"/**\n * define\n * @param id \u6a21\u5757\u540d\n * @param dependencies \u4f9d\u8d56\u5217\u8868\n * @param factory \u6a21\u5757\u7684\u5177\u4f53\u5185\u5bb9/\u5177\u4f53\u5b9e\u73b0\n */\ndefine(id?: string, dependencies?: string[], factory: Function | Object);\n")),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u793a\u4f8b")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-javascript"},'// hzfe.js\ndefine("hzfe", [], function () {\n const hzfeMember = 17;\n const getHZFEMember = () => {\n return `HZFE Member: ${hzfeMember}`;\n };\n\n exports.getHZFEMember = getHZFEMember;\n});\n\n// index.js\ndefine(function (require, exports) {\n const hzfe = require("hzfe"); // \u4f9d\u8d56\u5c31\u8fd1\n console.log(hzfe.getHZFEMember()); // HZFE Member: 17\n});\n')),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u4f7f\u7528\u573a\u666f")),(0,a.kt)("p",null,"CMD \u4e3b\u8981\u5728",(0,a.kt)("strong",{parentName:"p"},"\u6d4f\u89c8\u5668\u7aef"),"\u4e2d\u4f7f\u7528\uff0c\u901a\u8fc7\u7b26\u5408 CMD \u6807\u51c6\u7684 JavaScript \u5e93\uff08\u5982 sea.js\uff09\u52a0\u8f7d\u6a21\u5757\u3002"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u52a0\u8f7d\u65b9\u5f0f")),(0,a.kt)("p",null,"CMD \u901a\u8fc7\u5f02\u6b65\u7684\u65b9\u5f0f\u52a0\u8f7d\u6a21\u5757\uff0c\u6bcf\u52a0\u8f7d\u4e00\u4e2a\u6a21\u5757\u5b9e\u9645\u5c31\u662f\u52a0\u8f7d\u5bf9\u5e94\u7684 JS \u6587\u4ef6\u3002"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u4f18\u7f3a\u70b9")),(0,a.kt)("p",null,"\u4f18\u70b9"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u4f9d\u8d56\u5f02\u6b65\u52a0\u8f7d\uff0c\u66f4\u5feb\u7684\u542f\u52a8\u901f\u5ea6"),(0,a.kt)("li",{parentName:"ul"},"\u652f\u6301\u5faa\u73af\u4f9d\u8d56"),(0,a.kt)("li",{parentName:"ul"},"\u4f9d\u8d56\u5c31\u8fd1"),(0,a.kt)("li",{parentName:"ul"},"\u4e0e CommonJS \u4fdd\u6301\u5f88\u5927\u7684\u517c\u5bb9\u6027")),(0,a.kt)("p",null,"\u7f3a\u70b9"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u8bed\u6cd5\u76f8\u5bf9\u590d\u6742"),(0,a.kt)("li",{parentName:"ul"},"\u4f9d\u8d56\u52a0\u8f7d\u5668"),(0,a.kt)("li",{parentName:"ul"},"\u96be\u4ee5\u652f\u6301\u6a21\u5757\u9759\u6001\u5206\u6790")),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u5177\u4f53\u5b9e\u73b0")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://github.com/seajs/seajs"},"Sea.js"))),(0,a.kt)("h4",{id:"24-umd-universal-module-definition"},"2.4 UMD (Universal Module Definition)"),(0,a.kt)("p",null,"UMD\uff0c\u5373\u901a\u7528\u6a21\u5757\u5b9a\u4e49\u3002UMD \u4e3b\u8981\u4e3a\u4e86\u89e3\u51b3 CommonJS \u548c AMD \u89c4\u8303\u4e0b\u7684\u4ee3\u7801\u4e0d\u901a\u7528\u7684\u95ee\u9898\uff0c\u540c\u65f6\u8fd8\u652f\u6301\u5c06\u6a21\u5757\u6302\u8f7d\u5230\u5168\u5c40\uff0c\u662f",(0,a.kt)("strong",{parentName:"p"},"\u8de8\u5e73\u53f0"),"\u7684\u89e3\u51b3\u65b9\u6848\u3002"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u793a\u4f8b")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-javascript"},'// hzfe.js\n(function (root, factory) {\n if (typeof define === "function" && define.amd) {\n // AMD\n define(["exports", "hzfe"], factory);\n } else if (\n typeof exports === "object" &&\n typeof exports.nodeName !== "string"\n ) {\n // CommonJS\n factory(exports, require("hzfe"));\n } else {\n // Browser globals\n factory((root.commonJsStrict = {}), root.hzfe);\n }\n})(typeof self !== "undefined" ? self : this, function (exports, b) {\n const hzfeMember = 17;\n const getHZFEMember = () => {\n return `HZFE Member: ${hzfeMember}`;\n };\n\n exports.getHZFEMember = getHZFEMember;\n});\n\n// index.js\nconst hzfe = require("./hzfe.js");\nconsole.log(hzfe.getHZFEMember()); // HZFE Member: 17\n')),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u4f7f\u7528\u573a\u666f")),(0,a.kt)("p",null,"UMD \u53ef\u540c\u65f6\u5728\u670d\u52a1\u5668\u7aef\u548c\u6d4f\u89c8\u5668\u7aef\u4f7f\u7528\u3002"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u52a0\u8f7d\u65b9\u5f0f")),(0,a.kt)("p",null,"UMD \u52a0\u8f7d\u6a21\u5757\u7684\u65b9\u5f0f\u53d6\u51b3\u4e8e\u6240\u5904\u7684\u73af\u5883\uff0cNode.js \u540c\u6b65\u52a0\u8f7d\uff0c\u6d4f\u89c8\u5668\u7aef\u5f02\u6b65\u52a0\u8f7d\u3002"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u4f18\u7f3a\u70b9")),(0,a.kt)("p",null,"\u4f18\u70b9"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u8de8\u5e73\u53f0\u517c\u5bb9")),(0,a.kt)("p",null,"\u7f3a\u70b9"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u4ee3\u7801\u91cf\u7a0d\u5927")),(0,a.kt)("h4",{id:"25-esm-ecmascript-module"},"2.5 ESM (ECMAScript Module)"),(0,a.kt)("p",null,"ESM\uff0c\u5373 ESModule\u3001ECMAScript Module\u3002\u5b98\u65b9\u6a21\u5757\u5316\u89c4\u8303\uff0c",(0,a.kt)("strong",{parentName:"p"},"\u73b0\u4ee3\u6d4f\u89c8\u5668\u539f\u751f\u652f\u6301"),"\uff0c\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"p"},"import")," \u52a0\u8f7d\u6a21\u5757\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"export")," \u5bfc\u51fa\u5185\u5bb9\u3002\n",(0,a.kt)("strong",{parentName:"p"},"\u793a\u4f8b")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-javascript"},'// hzfe.js\nconst hzfeMember = 17;\nexport const getHZFEMember = () => {\n return `HZFE Member: ${hzfeMember}`;\n};\n\n// index.js\nimport * as hzfe from "./hzfe.js";\nconsole.log(hzfe.getHZFEMember()); // HZFE Member: 17\n')),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u4f7f\u7528\u573a\u666f")),(0,a.kt)("p",null,"ESM \u5728\u652f\u6301\u7684\u6d4f\u89c8\u5668\u73af\u5883\u4e0b\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\uff0c\u5728\u4e0d\u652f\u6301\u7684\u7aef\u9700\u8981\u7f16\u8bd1/\u6253\u5305\u540e\u4f7f\u7528\u3002"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u52a0\u8f7d\u65b9\u5f0f")),(0,a.kt)("p",null,"ESM \u52a0\u8f7d\u6a21\u5757\u7684\u65b9\u5f0f\u540c\u6837\u53d6\u51b3\u4e8e\u6240\u5904\u7684\u73af\u5883\uff0cNode.js \u540c\u6b65\u52a0\u8f7d\uff0c\u6d4f\u89c8\u5668\u7aef\u5f02\u6b65\u52a0\u8f7d\u3002"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u4f18\u7f3a\u70b9")),(0,a.kt)("p",null,"\u4f18\u70b9"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u652f\u6301\u540c\u6b65/\u5f02\u6b65\u52a0\u8f7d"),(0,a.kt)("li",{parentName:"ul"},"\u8bed\u6cd5\u7b80\u5355"),(0,a.kt)("li",{parentName:"ul"},"\u652f\u6301\u6a21\u5757\u9759\u6001\u5206\u6790"),(0,a.kt)("li",{parentName:"ul"},"\u652f\u6301\u5faa\u73af\u5f15\u7528")),(0,a.kt)("p",null,"\u7f3a\u70b9"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u517c\u5bb9\u6027\u4e0d\u4f73")),(0,a.kt)("h2",{id:"\u6269\u5c55\u9605\u8bfb"},"\u6269\u5c55\u9605\u8bfb"),(0,a.kt)("h3",{id:"1-\u9759\u6001\u5206\u6790"},"1. \u9759\u6001\u5206\u6790"),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"\u9759\u6001\u7a0b\u5e8f\u5206\u6790\uff08Static program analysis\uff09\u662f\u6307\u5728\u4e0d\u8fd0\u884c\u7a0b\u5e8f\u7684\u6761\u4ef6\u4e0b\uff0c\u8fdb\u884c\u7a0b\u5e8f\u5206\u6790\u7684\u65b9\u6cd5\u3002 ",(0,a.kt)("a",{parentName:"p",href:"https://zh.wikipedia.org/wiki/%E9%9D%9C%E6%85%8B%E7%A8%8B%E5%BA%8F%E5%88%86%E6%9E%90"},"\u9759\u6001\u7a0b\u5e8f\u5206\u6790 - Wiki"))),(0,a.kt)("p",null,"\u7b80\u800c\u8a00\u4e4b\uff0c\u524d\u6587\u91cc\u63d0\u5230\u7684\u9759\u6001\u5206\u6790\u5c31\u662f\u6307\u5728\u8fd0\u884c\u4ee3\u7801\u4e4b\u524d\u5c31\u53ef\u5224\u65ad\u51fa\u4ee3\u7801\u5185\u6709\u54ea\u4e9b\u4ee3\u7801\u4f7f\u7528\u5230\u4e86\uff0c\u54ea\u4e9b\u6ca1\u6709\u4f7f\u7528\u5230\u3002"),(0,a.kt)("h3",{id:"2-\u6a21\u5757\u5316\u4e0e\u5de5\u7a0b\u5316webpack"},"2. \u6a21\u5757\u5316\u4e0e\u5de5\u7a0b\u5316\uff1awebpack"),(0,a.kt)("p",null,"webpack \u540c\u65f6\u652f\u6301 CommonJS\u3001AMD \u548c ESM \u4e09\u79cd\u6a21\u5757\u5316\u89c4\u8303\u7684\u6253\u5305\u3002\u6839\u636e\u4e0d\u540c\u89c4\u8303 webpack \u4f1a\u5c06\u6a21\u5757\u5904\u7406\u6210\u4e0d\u540c\u7684\u4ea7\u7269\u3002"),(0,a.kt)("p",null,"CommonJS"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-javascript"},"(function (module, exports) {\n const hzfeMember = 17;\n const getHZFEMember = () => {\n return `HZFE Member: ${hzfeMember}`;\n };\n\n module.exports = getHZFEMember;\n});\n")),(0,a.kt)("p",null,"AMD"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-javascript"},"(function (module, exports, __webpack_require__) {\n var __WEBPACK_AMD_DEFINE_ARRAY__, // \u4f9d\u8d56\u5217\u8868\n __WEBPACK_AMD_DEFINE_RESULT__; // factory \u8fd4\u56de\u503c\n\n __WEBPACK_AMD_DEFINE_ARRAY__ = [];\n\n // \u6267\u884c factory\n __WEBPACK_AMD_DEFINE_RESULT__ = function () {\n const hzfeMember = 17;\n const getHZFEMember = () => {\n return `HZFE Member: ${hzfeMember}`;\n };\n\n return {\n getHZFEMember,\n };\n }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__);\n\n __WEBPACK_AMD_DEFINE_RESULT__ !== undefined &&\n (module.exports = __WEBPACK_AMD_DEFINE_RESULT__);\n});\n")),(0,a.kt)("p",null,"ESM"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-javascript"},'(function (module, __webpack_exports__, __webpack_require__) {\n __webpack_require__.r(__webpack_exports__);\n __webpack_require__.d(__webpack_exports__, "getHZFEMember", function () {\n return getHZFEMember;\n });\n\n const hzfeMember = 17;\n const getHZFEMember = () => {\n return `HZFE Member: ${hzfeMember}`;\n };\n});\n')),(0,a.kt)("h3",{id:"3-\u6a21\u5757\u5316\u4e0e\u5de5\u7a0b\u5316tree-shaking"},"3. \u6a21\u5757\u5316\u4e0e\u5de5\u7a0b\u5316\uff1aTree Shaking"),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"Tree Shaking \u662f\u4e00\u4e2a\u901a\u5e38\u7528\u4e8e\u63cf\u8ff0\u79fb\u9664 JavaScript \u4e0a\u4e0b\u6587\u4e2d\u7684\u672a\u5f15\u7528\u4ee3\u7801\uff08dead-code\uff09\u884c\u4e3a\u7684\u672f\u8bed\u3002\u5b83\u4f9d\u8d56\u4e8e ES2015 \u4e2d\u7684 import \u548c export \u8bed\u53e5\uff0c\u7528\u6765\u68c0\u6d4b\u4ee3\u7801\u6a21\u5757\u662f\u5426\u88ab\u5bfc\u51fa\u3001\u5bfc\u5165\uff0c\u4e14\u88ab JavaScript \u6587\u4ef6\u4f7f\u7528\u3002 ",(0,a.kt)("a",{parentName:"p",href:"https://developer.mozilla.org/zh-CN/docs/Glossary/Tree_shaking"},"Tree Shaking - MDN"))),(0,a.kt)("p",null,"\u7b80\u5355\u6765\u8bf4\uff0cTree Shaking \u662f\u4e00\u79cd\u4f9d\u8d56 ESM \u6a21\u5757\u9759\u6001\u5206\u6790\u5b9e\u73b0\u7684\u529f\u80fd\uff0c\u5b83\u53ef\u4ee5\u5728\u7f16\u8bd1\u65f6\u5b89\u5168\u7684\u79fb\u9664\u4ee3\u7801\u4e2d\u672a\u4f7f\u7528\u7684\u90e8\u5206\uff08webpack 5 \u5bf9 CommonJS \u4e5f\u8fdb\u884c\u4e86\u652f\u6301\uff0c\u5728\u6b64\u4e0d\u8be6\u7ec6\u5c55\u5f00\uff09\u3002"),(0,a.kt)("h2",{id:"\u53c2\u8003\u8d44\u6599"},"\u53c2\u8003\u8d44\u6599"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("a",{parentName:"li",href:"https://nodejs.org/api/modules.html#modules_modules_commonjs_modules"},"Modules: CommonJS modules")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("a",{parentName:"li",href:"https://en.wikipedia.org/wiki/Asynchronous_module_definition"},"Asynchronous module definition")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("a",{parentName:"li",href:"https://github.com/seajs/seajs/issues/242"},"Common Module Definition")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("a",{parentName:"li",href:"https://github.com/umdjs/umd/"},"Universal Module Definition")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("a",{parentName:"li",href:"https://nodejs.org/api/modules.html#modules_modules_commonjs_modules"},"Modules: ECMAScript modules")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("a",{parentName:"li",href:"https://tc39.es/ecma262/#sec-modules"},"Module Semantics"))))}c.isMDXComponent=!0}}]);