1.Nodejs 中的模塊
在node環境中一個js文件就是一個模塊(module) 我們采用的是CommonJS規范,使用require引入模塊,使用module.exports導出接口
node的module遵循CommonJS規范,requirejs遵循AMD,seajs遵循CMD
// a.js
// -------- node -----------
module.exports = {
a : function() {},
b : 'xxx'
};
// ----------- AMD or CMD ----------------關於AMD/CMD http://www.cnblogs.com/chenguangliang/p/5856701.html
define(function(require, exports, module){
module.exports = {
a : function() {},
b : 'xxx'
};
// ------------ node ---------
var m = require('./a');
m.a();
// ------------ AMD or CMD -------------
define(function(require, exports, module){
var m = require('./a');
m.a();
});
1-1關於AMD 、CMD
Node 使用 CommonJS 模塊系統。
AMD:AMD即Asynchronous Module Definition,翻譯過來就是異步模塊化定義 requirejs是遵循此規范
CMD: common moudle definition,翻譯過來即通用模塊定義 seajs是遵循此規范
1.RequireJS在主文件里是將所有的文件同時加載,然而SeaJS強調一個文件一個模塊。
2.AMD推崇依賴前置,CMD推崇依賴就近。
amd 加載完模塊后立即執行 cmd加載完模塊后 遇到require 才執行
2.ES6中的模塊
使用export 導出模塊,import 導入模塊
3.兩種引用模塊方式對比
1. import是編譯時的(require是運行時的),它必須放在文件開頭,而且使用格式也是確定的,不容置疑。
2. import不會將整個模塊運行后賦值給某個變量,而是只選擇import的接口進行編譯,這樣在性能上比require好很多。
3. require是賦值過程,import是解構過程,當然,require也可以將結果解構賦值給一組變量,但是import在遇到default時,和require則完全不同: var $ = require('jquery'); 和 import $ from 'jquery' 是完全不同的兩種概念。
目前 我們在node中使用babel支持ES6,也僅僅是將ES6轉碼為ES5再執行,import語法會被轉碼為require。這也是為什么在模塊導出時使用module.exports,在引入模塊時使用import仍然起效,因為本質上,import會被轉碼為require去執行。
上面3條 參考文章 https://blog.csdn.net/baidu_31333625/article/details/53980302
4.在node中使用ES6
nodejs仍未支持import/export語法,需要安裝必要的npm包–babel,使用babel將js文件編譯成node.js支持的commonjs格式的代碼。