国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

詳解Node中導入模塊require和import的區別

2024-05-06 15:13:08
字體:
來源:轉載
供稿:網友

ES6標準發布后,module成為標準,標準的使用是以export指令導出接口,以import引入模塊,但是在我們一貫的node模塊中,我們采用的是CommonJS規范,使用require引入模塊,使用module.exports導出接口。

不把require和import整清楚,會在未來的標準編程中死的很難看。

require時代的模塊

node編程中最重要的思想之一就是模塊,而正是這個思想,讓JavaScript的大規模工程成為可能。模塊化編程在js界流行,也是基于此,隨后在瀏覽器端,requirejs和seajs之類的工具包也出現了,可以說在對應規范下,require統治了ES6之前的所有模塊化編程,即使現在,在ES6 module被完全實現之前,還是這樣。

node的module遵循CommonJS規范,requirejs遵循AMD,seajs遵循CMD,雖各有不同,但總之還是希望保持較為統一的代碼風格。

// a.js// -------- node -----------module.exports = { a : function() {}, b : 'xxx'};// ----------- AMD or CMD ----------------define(function(require, exports, module){ module.exports = {  a : function() {},  b : 'xxx' };});

可以看出,為了保持風格的高度統一,除了在瀏覽器端的模塊中要使用一個define函數來提供模塊的閉包以外,其他代碼可以完全一致。

// b.js// ------------ node ---------var m = require('./a');m.a();// ------------ AMD or CMD -------------define(function(require, exports, module){  var m = require('./a');  m.a();});

在使用上,也非常相似。雖然AMD or CMD提供了更加豐富的風格,但是我們本文主要是討論node環境下,所以不做擴展。

ES6中的module

ES6發布的module并沒有直接采用CommonJS,甚至連require都沒有采用,也就是說require仍然只是node的一個私有的全局方法,module.exports也只是node私有的一個全局變量屬性,跟標準半毛錢關系都沒有。

export導出模塊接口

export的用法挺復雜的,具體有哪些可以看 這里 。這里舉幾個例子:

// a.jsexport default function() {}export function a () {}var b = 'xxx';export {b}; // 這是ES6的寫法,實際上就是{b:b}setTimeout(() => b = 'ooo', 1000);export var c = 100;

在要導出的接口前面,加入export指令。

在export之后,b還可以被修改,這和CommonJS有著巨大不同,關于內部機理的東西,本文就無恥的省略了。

注意,下面的語法有嚴重錯誤:

// 錯誤演示export 1; // 絕對不可以var a = 100;export a;

export在導出接口的時候,必須與模塊內部的變量具有一一對應的關系。直接導出1沒有任何意義,也不可能在import的時候有一個變量與之對應。 export a 雖然看上去成立,但是 a 的值是一個數字,根本無法完成解構,因此必須寫成 export {a} 的形式。即使a被賦值為一個function,也是不允許的。而且,大部分風格都建議,模塊中最好在末尾用一個export導出所有的接口,例如:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 贵阳市| 观塘区| 美姑县| 济阳县| 响水县| 永胜县| 呼和浩特市| 双峰县| 沙河市| 当涂县| 鸡西市| 普兰店市| 贺州市| 开远市| 青川县| 资溪县| 静安区| 金昌市| 遵义市| 车险| 厦门市| 富民县| 石首市| 偏关县| 南通市| 滦南县| 溧阳市| 兴城市| 扎鲁特旗| 嘉鱼县| 长垣县| 石棉县| 昌平区| 丹东市| 宁明县| 东乡县| 岗巴县| 陈巴尔虎旗| 张家口市| 乾安县| 玛曲县|