在 Node.js 中,模块是一种可重用的代码块或库。模块有助于开发者保持代码组织良好和可维护性,并且可以被多个文件或项目共享复用。Node.js 为模块提供了简单的导入(require
)和导出(exports
)机制。
导出
- CommonJS
在 Node.js 中通过 module.exports
来导出一个模块。可以向 module.exports
传递一个对象,这个对象就会成为模块的默认导出。例如:
// person.js
const name = "John Doe";
const age = 30;
module.exports = {
name: name,
age: age
};
在上面的代码中,我们定义了一个名为 person
的模块,导出了一个包含名字和年龄的对象。
- ES6
在使用 ES6 模块语法时,我们可以使用“导出(
export
)”关键字来导出模块。例如:
// person.js
export const name = "John Doe";
export const age = 30;
在上面的代码中,我们使用 "export
" 关键字来导出了两个变量。
导入
- CommonJS
在 Node.js 中通过 require
来导入模块。例如:
// main.js
const person = require("./person");
console.log(`Name: ${person.name}`);
console.log(`Age: ${person.age}`);
在上面的代码中,我们通过 require
函数导入了 person
模块,并将其赋值给一个变量。通过这个变量我们可以访问 person
模块的属性和方法。
还有一个更简单的方法就是将要导出的信息直接赋值给 module.exports
,例如:
// person.js
const name = "John Doe";
const age = 30;
module.exports.name = name;
module.exports.age = age;
这种语法会使代码变得更加简洁易懂,并且允许我们按需导出模块的子模块。例如,在模块中导出一个函数:
// person.js
function sayHello(name) {
console.log(`Hello ${name}`);
}
module.exports = {
sayHello: sayHello
};
在其他文件中导入函数并使用:
// main.js
const person = require("./person");
person.sayHello("John");
这样可以确保代码一致,避免在两个地方写同样的函数。
- ES6
在 Node.js 中支持使用“导入(import
)”关键字来导入 ES6 模块。例如:
// main.js
import { name, age } from "./person.js";
console.log(`Name: ${name}`);
console.log(`Age: ${age}`);
在上面的代码中,我们使用“导入”关键字从 person.js
中导入了 name
和 age
变量。
使用“导入”关键字还有其他几种方式。例如,可以使用默认导出:
// person.js
export default {
name: "John Doe",
age: 30
};
使用:
// main.js
import person from "./person.js";
console.log(`Name: ${person.name}`);
console.log(`Age: ${person.age}`);
在上面的代码中,我们使用“导入”关键字和“默认导出”语法导入了一个对象,其中包含两个属性:name
和 age
。可以使用对象的属性访问这些值。
另外,我们还可以使用“导入”关键字来导入整个模块,或者使用“取别名”来改变导入的名称:
// main.js
import * as person from "./person.js";
console.log(`Name: ${person.name}`);
console.log(`Age: ${person.age}`);
在上面的代码中,我们使用“导入”关键字和“*
”语法导入了整个 person.js
模块,并将其命名为 person
。可以使用对象的属性访问模块导出的所有值。
总结
使用 ES6 模块语法的导入和导出比使用旧版的 CommonJS 规范更加现代化和优雅,更加适合现代化的前端开发。