日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JS JavaScript模块化(ES Module/CommonJS/AMD/CMD)

發布時間:2025/4/16 javascript 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JS JavaScript模块化(ES Module/CommonJS/AMD/CMD) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

前端開發中,起初只要在script標簽中嵌入幾十上百行代碼就能實現一些基本的交互效果,后來js得到重視,應用也廣泛起來了,

jQuery,Ajax,Node.Js,MVC,MVVM等的助力也使得前端開發得到重視,也使得前端項目越來越復雜,

然而,JavaScript卻沒有為組織代碼提供任何明顯幫助,甚至沒有類的概念,更不用說模塊(module)了,那么什么是模塊呢?

一個模塊就是實現特定功能的文件,有了模塊,我們就可以更方便地使用別人的代碼,想要什么功能,就加載什么模塊。

?

一、AMD 規范

AMD 是 RequireJS 在推廣過程中對模塊定義的規范化產出。

模塊將被異步加載,模塊加載不影響后面語句的運行。

所有依賴某些模塊的語句均放置在回調函數中。

?

用法:

  • 定義模塊:define(id?, dependencies?, factory)
  • 加載模塊:require([module], factory)
// a.js // 依賴有三個默認的,即"require", "exports", "module"。順序個數均可視情況 // 如果忽略則factory默認此三個傳入參數 // id一般是不傳的,默認是文件名 define(["b", "require", "exports"], function(b, require, exports) {console.log("a.js執行");console.log(b); // 暴露api可以使用exports、module.exports、returnexports.a = function() {return require("b");} }) // b.js define(function() {console.log('b.js執行');console.log(require);console.log(exports);console.log(module);return 'b'; }) // index.js // 支持Modules/Wrappings寫法,注意dependencies得是空的,且factory參數不可空 define(function(require, exports, module) {console.log('index.js執行');var a = require('a');var b = require('b'); }) // index.js require(['a', 'b'], function(a, b) {console.log('index.js執行'); })

?

?

二、CMD 規范

CMD 是 SeaJS 在推廣過程中對模塊定義的規范化產出。

在 CMD 規范中,一個模塊就是一個文件。

?

用法:

  • 定義模塊:define(factory)
/ require, exports, module參數順序不可亂 // 暴露api方法可以使用exports、module.exports、return // 與requirejs不同的是,若是未暴露,則返回{},requirejs返回undefined define(function(require, exports, module) {console.log('a.js執行');console.log(require);console.log(exports);console.log(module); }) // b.js // define(function(require, module, exports) {console.log('b.js執行');console.log(require);console.log(exports);console.log(module); }) // index.js define(function(require) {var a = require('a');var b = require('b');console.log(a);console.log(b); })

?

?

三、CommonJs?規范

CommonJs 是服務器端模塊的規范。

Node.js 采用了這個規范。Node.JS首先采用了js模塊化的概念。

根據 CommonJs?規范,一個單獨的文件就是一個模塊。每一個模塊都是一個單獨的作用域,也就是說,在該模塊內部定義的變量,無法被其他模塊讀取,除非定義為 global 對象的屬性。

?

用法:

  • 輸出模塊:module.exports
  • 加載模塊:require
// 導出使用module.exports,也可以exports。exports指向module.exports;即exports = module.exports // 就是在此對象上掛屬性 // commonjs module.exports.add = function add(params) {return ++params; } exports.sub = function sub(params) {return --params; }// 加載模塊使用require('xxx')。相對、絕對路徑均可。默認引用js,可以不寫.js后綴 // index.js var common = require('./commonjs'); console.log(common.sub(1)); console.log(common.add(1));

?

?

四、ES Module

ES6 在語言標準的層面上,實現了模塊功能,成為瀏覽器和服務器通用的模塊解決方案,完全可以取代 CommonJS 和 AMD 規范。

?

基本特點:

  • 每一個模塊只加載一次, 每一個JS只執行一次, 如果下次再去加載同目錄下同文件,直接從內存中讀取;
  • 每一個模塊內聲明的變量都是局部變量, 不會污染全局作用域;
  • 模塊內部的變量或者函數可以通過export導出;
  • 一個模塊可以導入別的模塊

?

用法:

  • 輸出模塊:export
  • 加載模塊:import?
// module export function fn1(){return "這是 fn1"; }export function fn2(){return "這是 fn2" ; }// main.js //逐一加載 import { fn1, fn2 } from './module';console.log( fn1()); console.log( fn2());//整體加載 import * as all from './module';console.log( all.fn1() ); console.log( all.fn2() );

?

?

動態加載模塊:

// 普通寫法 import('./module').then(({ a }) => {}) // async、await const { a } = await import('./module');

?

?

五、各模塊之間的區別

1、CommonJS 與 AMD/CMD 的差異

  • CommonJS:是同步加載(代碼在本地,加載時間基本等于硬盤讀取時間)。
  • AMD / CMD:是異步加載

?

2、AMD 與 CMD 的差異

  • AMD是提前執行,CMD是延遲執行
  • AMD推薦依賴前置,CMD推薦依賴就近

?

3、CommonJS 與 ES Module 的差異

  • CommonJS 模塊是對象,是運行時加載,運行時才把模塊掛載在 exports 之上(加載整個模塊的所有),加載模塊其實就是查找對象屬性
  • ES Module 不是對象,是使用 export 顯示指定輸出,再通過 import 輸入,此法為編譯時加載
  • CommonJS 模塊輸出的是一個值的拷貝,ES6 模塊輸出的是值的引用。
  • CommonJS 模塊是運行時加載,ES6 模塊是編譯時輸出接口

?

3、各模塊用法上的區別

  詳見各模塊介紹...

?

?

?

?

?

隨筆整理自
  https://www.jianshu.com/p/da2ac9ad2960
感謝博主分享!

轉載于:https://www.cnblogs.com/gaosirs/p/10772675.html

總結

以上是生活随笔為你收集整理的JS JavaScript模块化(ES Module/CommonJS/AMD/CMD)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 茄子av在线 | 日本午夜精华 | 韩国bj大尺度vip福利网站 | eeuss国产一区二区三区黑人 | 欧美性视频在线 | 四虎音影 | 亚洲欲 | 韩国电影大尺度在线观看 | 免费看黄色aaaaaa 片 | mm视频在线观看 | 国产日韩高清在线 | 中文字幕av网址 | 亚洲欧美日韩另类 | 精品一区二区在线看 | 在线视频区 | 九九在线精品 | 91a视频 | 欧美大片免费高清观看 | 少妇丰满尤物大尺度写真 | 日韩免费淫片 | 久久99精品久久久久久园产越南 | 国产一级片久久 | 国产在线一二 | hitomi一区二区三区精品 | 少妇按摩一区二区三区 | 亚洲av无码一区二区三区在线观看 | 亚洲精品久久久久久国产精华液 | 成人网页在线观看 | 国产奶水涨喷在线播放 | 亚洲视频中文字幕在线观看 | 在线观看不卡av | 偷拍自拍一区 | 久久久久麻豆 | 国产免费黄 | 激情久久免费视频 | 亚洲综合日韩精品欧美综合区 | 高清一区二区视频 | 亚洲成人一二三区 | 日本免费一区二区三区四区五六区 | 伊人激情视频 | 久久一区精品 | 亚洲激情另类 | 伊人在线 | 日本黄网站在线观看 | 超黄网站在线观看 | 日韩精品一区二区视频 | 午夜神器在线观看 | 日韩免费观看 | 欧美成人秋霞久久aa片 | 91热精品 | 亚洲素人在线 | 成人h网站 | 亚洲免费观看高清完整版在线 | 全部免费毛片在线播放一个 | 国产激情一区二区三区四区 | 欧美又粗又长 | 12av毛片| 国产妻精品一区二区在线 | 一区二区免费在线观看视频 | 在线观看亚洲a | 日韩精品一区二区三区在线视频 | 香蕉在线视频观看 | 国产高清一级 | 美女一区二区视频 | 欧美成网站| 欧美日韩国产亚洲一区 | 欧美黄色一区二区三区 | 国语对白真实视频播放 | 亚洲视频一区二区在线观看 | 一级片手机在线观看 | 国产社区在线 | 理论片国产 | av中文字幕一区二区三区 | 亚洲天堂2018av| 欧美xxxx18 | 人人爱爱人人 | 欧美韩国一区 | 久久99精品久久久久婷婷 | 国产wwwwww| 99欧美| 日韩精品极品视频在线观看免费 | 国产小视频你懂的 | 毛片黄片免费看 | 欧美成人午夜精品久久久 | 亲嘴扒胸摸屁股激烈网站 | 日日干天天干 | 午夜免费精品 | 密乳av | 少妇人妻偷人精品无码视频新浪 | 无码精品人妻一区二区三区漫画 | h片在线观看网站 | 在线观看超碰 | 欧美偷拍少妇精品一区 | 丝袜一区二区三区四区 | 日韩人妻无码一区二区三区 | 欧美性视频播放 | 国产农村妇女精品久久久 | 黄色国产一区二区 | 日本精品视频一区二区 |