module.exports 与 exports
-
一个文件就是一个模块,即module;这个文件有自己的作用域,在一个文件里面定义的变量、函数、类等都是私有的,对其他文件不可见
-
在每个模块内部,module变量即为当前模块,这个变量是一个对象,他的exports属性是对外的接口属性,加载这个模块,其实就是加载该模块的module.exports属性;
'use strict'; var a = 2; var b = 3; function methodTools() { } module.exports.fa = a; module.exports.fb = b;
上述代码通过module.exports对外暴露 fa、fb两个变量
外部用require、或者import则可以访问到fa、fb两个变量了
-
exports:为了方便,Node为每个模块提供一个exports变量,指向module.exports。这等同在每个模块头部,有一行这样的命令。
var exports = module.exports;
即 exports 为 module.exports。所以通过exports可以访问到fa、fb了
'use strict'; var a = 2; var b = 3; function methodTools() { } exports.fa = a; exports.fb = b;
-
注意exports、module.exports 导出的是module;如果外部文件引用
-
import引用
import example from './common/appMethod'; let { fa, fb } = example; console.log(fa); //2
-
require引用
var example = require('./common/appMethod') console.log(example.fa);//2 console.log(example);//{fa: 2, fb: 3}
-
export 、 export default
-
ES6使用 export 和 import 来导出、导入模块
// a文件 // 'use strict'; var a = 2; var b = 3; function methodTools() { } export { a, b }; // b文件导入a文件 var example = require('./common/appMethod') console.log(example); // 输出信息 {__esModule: true} a: 2 b: 3 // c 文件导入a文件 import { a, c } from './common/appMethod'; console.log(a, c); // 输出信息 2 undefined
-
使用export default命令,为模块指定默认输出
-
模块文件
'use strict'; var a = 2; var b = 3; export { a, b }; export default a;
-
导入模块
import { a, b, c, d, j } from './common/appMethod'; import def_M from './common/appMethod'; console.log(a, b, c, d, j, def_M); 输出信息 2 3 undefined undefined undefined 2
-
-
如果使用export default,不能使用结构赋值获取到导出变量
-
使用require
var example = require('./common/appMethod'); console.log(example); // 输出 {default: 2, __esModule: true} a: 2, b: 3, default: 2,