?Common JS是一套用于JavaScript的模块化规范,旨在为非浏览器环境提供一致的编程模型。而Node中对CommonJS进行了支持和实现,可以对模块进行导入、导出。
每个文件就是一个模块,有自己的作用域。在一个文件里面定义的变量、函数、类,都是私有的,对其他文件不可见。
?每个模块内部都有一个模块对象,代表当前模块,有以下几个属性
导出分为module.exports导出和exports导出,两者实则指向同一个对象,exports可以相当于指向的是对象的引用地址,默认
注意:两种导入不可以同时使用,如果同时使用最终导出的结果都是以 module.exports 所指向的对象为准。
//1.js内的代码 使用module.exports导出
function getData() {
console.log(2222);
}
const a = {
name: 'zhangsan ',
};
module.exports = { getData, a };
//2.js内 导入1.js导出的模块
const f = require('./1');
console.log(f);
//输出结果
//{ getData: [Function: getData], a: { name: 'zhangsan ' } }
注意:exports导出不能直接赋值一个变量/引用对象,因为exports指向的是引用地址,如果赋值则改变了指向,失去导出的相关属性,只能通过exports.某个属性进行赋值
//1.js内的代码
exports.a = 1;
exports.getData = function getData() {
console.log(2222);
};
//2.js内导入1.js
const f = require('./1');
console.log(f);
//输出结果
//{ a: 1, getData: [Function: getData] }
错误示例:
如果module.exports和exports同时使用,只会采用module.exports的内容
//在1.js中同时使用module.exports和exports
const f = function getData() {
console.log(2222);
};
exports.a = 1;
exports.getData = f;
module.exports = { f };
//在2.js中输出导入的内容
const f = require('./1');
console.log(f);
//结果为module.exports导出的内容
{ f: [Function: getData] }
require方法用于加载exports导出的数据,实则是加载js文件
//引入1.js文件
const f = require('./1');
console.log(f);
以上则是对CommonJs使用的相关知识点总结,希望对你有所帮助。