导出变量和常量
要导出变量或常量,只需将其分配给 exports
对象。例如:
exports.myVariable = 10;
exports.PI = 3.14;
导出函数
要导出函数,可以将函数分配给 exports
对象。例如:
exports.myFunction = function(x, y) {
return x + y;
};
导出对象
要导出对象,可以将对象分配给 exports
对象。例如:
exports.myObject = {
name: "John",
age: 30
};
导出整个模块
如果要导出整个模块,可以将模块本身分配给 exports
对象。例如:
exports = {
myVariable: 10,
myFunction: function(x, y) {
return x + y;
},
myObject: {
name: "John",
age: 30
}
};
避免污染全局作用域
重要的是要注意,在 Node.js 中,exports
对象是全局对象。这意味着导出到 exports
对象的任何变量、函数或对象都可以在全局作用域中访问。为了避免污染全局作用域,建议使用模块系统(例如 CommonJS 或 ES Modules)来导出模块。
模块系统
模块系统允许您将代码组织成单独的文件,称为模块。每个模块都有自己的私有作用域,其中导出的变量、函数和对象仅在该模块内可见。
CommonJS 模块系统使用 require()
函数来导入模块,而 ES Modules 使用 import
语句来导入模块。
CommonJS 模块系统
// my-module.js
exports.myVariable = 10;
// app.js
const myModule = require("./my-module");
console.log(myModule.myVariable); // 输出:10
ES Modules
// my-module.js
export const myVariable = 10;
// app.js
import { myVariable } from "./my-module";
console.log(myVariable); // 输出:10
何时使用 exports 对象
exports
对象主要用于以下情况:
- 共享全局变量或函数。
- 将模块导出到全局作用域(不推荐)。
- 与旧版代码集成。
何时使用模块系统
模块系统通常优于 exports
对象,原因如下:
- 它们提供了私有作用域,从而避免了全局作用域污染。
- 它们允许您导入和导出多个模块,从而提高模块化程度。
- 它们与现代 JavaScript 标准兼容。