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