摘要:要想讓模塊再次運(yùn)行,必須清除緩存。模塊加載會(huì)阻塞接下來代碼的執(zhí)行,需要等到模塊加載完成才能繼續(xù)執(zhí)行同步加載。環(huán)境服務(wù)器環(huán)境應(yīng)用的模塊規(guī)范是參照實(shí)現(xiàn)的。這等同在每個(gè)模塊頭部,有一行這樣的命令。
commonJS
特點(diǎn):
1、模塊可以多次加載,但是只會(huì)在第一次加載時(shí)運(yùn)行一次,然后運(yùn)行結(jié)果就被緩存了,以后再加載,就直接讀取緩存結(jié)果。要想讓模塊再次運(yùn)行,必須清除緩存。
2、模塊加載會(huì)阻塞接下來代碼的執(zhí)行,需要等到模塊加載完成才能繼續(xù)執(zhí)行——同步加載。
環(huán)境:服務(wù)器環(huán)境
應(yīng)用:nodejs的模塊規(guī)范是參照commonJS實(shí)現(xiàn)的。
語法:
1、導(dǎo)入:require("路徑")
2、導(dǎo)出:module.exports和exports
注意:module.exports和exports的的區(qū)別是exports只是對(duì)module.exports的一個(gè)引用,相當(dāng)于Node為每個(gè)模塊提供一個(gè)exports變量,指向module.exports。這等同在每個(gè)模塊頭部,有一行var exports = module.exports;這樣的命令。
demo
// a.js // 相當(dāng)于這里還有一行:var exports = module.exports;代碼 exports.a = "Hello world"; // 相當(dāng)于:module.exports.a = "Hello world"; // b.js var moduleA = require("./a.js"); console.log(moduleA.a); // 打印出hello worldAMD
特點(diǎn):
1、異步加載
2、管理模塊之間的依賴性,便于代碼的編寫和維護(hù)。
環(huán)境:瀏覽器環(huán)境
應(yīng)用:requireJS是參照AMD規(guī)范實(shí)現(xiàn)的
語法:
1、導(dǎo)入:require(["模塊名稱"], function ("模塊變量引用"){// 代碼});
3、導(dǎo)出:define(function (){return "值");
demo
// a.js define(function (){ return { a:"hello world" } }); // b.js require(["./a.js"], function (moduleA){ console.log(moduleA.a); // 打印出:hello world });CMD
特點(diǎn)
1、CMD是在AMD基礎(chǔ)上改進(jìn)的一種規(guī)范,和AMD不同在于對(duì)依賴模塊的執(zhí)行時(shí)機(jī)處理不同,CMD是就近依賴,而AMD是前置依賴。
環(huán)境:瀏覽器環(huán)境
應(yīng)用:seajs是參照UMD規(guī)范實(shí)現(xiàn)的,requireJS的最新的幾個(gè)版本也是部分參照了UMD規(guī)范的實(shí)現(xiàn)
語法:
1、導(dǎo)入:define(function(require, exports, module) {});
2、導(dǎo)出:define(function (){return "值");
demo
// a.js define(function (require, exports, module){ exports.a = "hello world"; }); // b.js define(function (require, exports, module){ var moduleA = require("./a.js"); console.log(moduleA.a); // 打印出:hello world });UMD
特點(diǎn):
1、兼容AMD和commonJS規(guī)范的同時(shí),還兼容全局引用的方式
環(huán)境:瀏覽器或服務(wù)器環(huán)境
應(yīng)用:無
語法:
1、無導(dǎo)入導(dǎo)出規(guī)范,只有如下的一個(gè)常規(guī)寫法:
常規(guī)寫法:
(function (root, factory) { if (typeof define === "function" && define.amd) { //AMD define(["jquery"], factory); } else if (typeof exports === "object") { //Node, CommonJS之類的 module.exports = factory(require("jquery")); } else { //瀏覽器全局變量(root 即 window) root.returnExports = factory(root.jQuery); } }(this, function ($) { //方法 function myFunc(){}; //暴露公共方法 return myFunc; }));ES6 module
特點(diǎn):
1、按需加載(編譯時(shí)加載)
2、import和export命令只能在模塊的頂層,不能在代碼塊之中(如:if語句中),import()語句可以在代碼塊中實(shí)現(xiàn)異步動(dòng)態(tài)按需動(dòng)態(tài)加載
環(huán)境:瀏覽器或服務(wù)器環(huán)境(以后可能支持)
應(yīng)用:ES6的最新語法支持規(guī)范
語法:
1、導(dǎo)入:import {模塊名A,模塊名B...} from "模塊路徑"
2、導(dǎo)出:export和export default
3、import("模塊路徑").then()方法
注意:export只支持對(duì)象形式導(dǎo)出,不支持值的導(dǎo)出,export default命令用于指定模塊的默認(rèn)輸出,只支持值導(dǎo)出,但是只能指定一個(gè),本質(zhì)上它就是輸出一個(gè)叫做default的變量或方法。
規(guī)范:
/*錯(cuò)誤的寫法*/ // 寫法一 export 1; // 寫法二 var m = 1; export m; // 寫法三 if (x === 2) { import MyModual from "./myModual"; } /*正確的三種寫法*/ // 寫法一 export var m = 1; // 寫法二 var m = 1; export {m}; // 寫法三 var n = 1; export {n as m}; // 寫法四 var n = 1; export default n; // 寫法五 if (true) { import("./myModule.js") .then(({export1, export2}) => { // ...· }); } // 寫法六 Promise.all([ import("./module1.js"), import("./module2.js"), import("./module3.js"), ]) .then(([module1, module2, module3]) => { ··· });
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/92106.html
摘要:常見模塊化方案是由社區(qū)提出的模塊化方案中的一種,遵循了這套方案。是模塊化規(guī)范中的一種,遵循了這套規(guī)范。中的模塊化能力由兩個(gè)命令構(gòu)成和,命令用于規(guī)定模塊的對(duì)外接口,命令用于輸入其他模塊提供的功能。 為什么需要模塊化 在ES6出現(xiàn)之前,JS語言本身并沒有提供模塊化能力,這為開發(fā)帶來了一些問題,其中最重要的兩個(gè)問題應(yīng)當(dāng)是全局污染和依賴管理混亂。 // file a.js var name =...
摘要:若不存在則模塊標(biāo)識(shí)應(yīng)該默認(rèn)定義為在加載器中被請(qǐng)求腳本的標(biāo)識(shí)。這也是目前很多插件頭部的寫法,就是用來兼容各種不同模塊化的寫法。語句輸出的值是動(dòng)態(tài)綁定的,綁定其所在的模塊。 前言 歷史上,js沒有模塊化的概念,不能把一個(gè)大工程分解成很多小模塊。這對(duì)于多人開發(fā)大型,復(fù)雜的項(xiàng)目形成了巨大的障礙,明顯降低了開發(fā)效率,java,Python有import,甚至連css都有@import,但是令人費(fèi)...
摘要:即盡早地執(zhí)行依賴模塊。阮一峰輸出值的引用模塊是動(dòng)態(tài)關(guān)聯(lián)模塊中的值,輸出的是值得引用。的加載實(shí)現(xiàn)阮一峰運(yùn)行時(shí)加載靜態(tài)編譯模塊是運(yùn)行時(shí)加載,模塊是編譯時(shí)輸出接口。 模塊化開發(fā) 優(yōu)點(diǎn) 模塊化開發(fā)中,通常一個(gè)文件就是一個(gè)模塊,有自己的作用域,只向外暴露特定的變量和函數(shù),并且可以按需加載。 依賴自動(dòng)加載,按需加載。 提高代碼復(fù)用率,方便進(jìn)行代碼的管理,使得代碼管理更加清晰、規(guī)范。 減少了命名沖...
摘要:參考資料前端模塊化詳解完整版入門近一萬字的語法知識(shí)點(diǎn)補(bǔ)充徹底搞清楚中的和和詳解 前言 前端的模塊化之路經(jīng)歷了漫長(zhǎng)的過程,想詳細(xì)了解的小伙伴可以看浪里行舟大神寫的前端模塊化詳解(完整版),這里根據(jù)幾位大佬們寫的文章,將模塊化規(guī)范部分做了匯總和整理,希望讀完的小伙伴能有些收獲,也希望覺得有用的小伙伴可以點(diǎn)個(gè)贊,筆芯。 什么是模塊 將一個(gè)復(fù)雜的程序依據(jù)一定的規(guī)則(規(guī)范)封裝成幾個(gè)塊(文件)...
摘要:也就是說,外部模塊輸出值變了,當(dāng)前模塊的導(dǎo)入值不會(huì)發(fā)生變化。三規(guī)范的出現(xiàn),使得模塊化在環(huán)境中得到了施展機(jī)會(huì)。模塊化這種加載稱為編譯時(shí)加載或者靜態(tài)加載。總結(jié)的模塊化規(guī)范經(jīng)過了模塊模式的演進(jìn),利用現(xiàn)在常用的打包工具,非常方便我們編寫模塊化代碼。 前言 什么是模塊化? 模塊就是實(shí)現(xiàn)特定功能的一組方法,而模塊化是將模塊的代碼創(chuàng)造自己的作用域,只向外部暴露公開的方法和變量,而這些方法之間高度解耦...
閱讀 1598·2021-11-04 16:11
閱讀 3309·2021-09-09 11:33
閱讀 1558·2019-08-30 15:54
閱讀 619·2019-08-30 15:44
閱讀 3174·2019-08-30 15:43
閱讀 2554·2019-08-30 13:06
閱讀 1698·2019-08-29 17:00
閱讀 895·2019-08-29 15:33