node中模块、AMD与CMD、ES6模块,node中使用ES6


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格式的代码。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM