Node.js 提供了多种方式来导入模块和文件,以下是关于如何导入模块的详细解释和示例。
1. 使用 require()
Node.js 使用 CommonJS 模块规范,最常见的方式是使用 require() 函数导入模块。require() 函数接受模块的路径或模块的名称,并返回该模块的导出内容。
示例:
// 导入内置模块
const fs = require('fs');
// 导入自定义模块
const myModule = require('./myModule');
// 导入 npm 包
const express = require('express');
2. 模块的导出
要使模块能够被其他文件导入,需要使用 module.exports 或 exports 导出模块的内容。
示例:
// myModule.js
const greeting = 'Hello, World!';
function greet() {
console.log(greeting);
}
// 导出函数和变量
module.exports = {
greet,
greeting,
};
3. 导入 JSON 文件
Node.js 也可以直接导入 JSON 文件。使用 require() 导入 JSON 文件时,Node.js 会自动将其解析为一个 JavaScript 对象。
示例:
const config = require('./config.json');
console.log(config);
4. ES6 模块导入(experimental)
从 Node.js 12 开始,Node.js 开始支持 ES6 模块(.mjs 文件或在 package.json 中设置 "type": "module")。使用 import 语句导入模块。
示例:
// 导入 ES6 模块
import { greet, greeting } from './myModule.mjs';
greet();
5. 动态导入
使用 import() 函数可以在运行时动态导入模块。这是一个返回 Promise 的异步操作。
示例:
(async () => {
const module = await import('./myModule.js');
module.greet();
})();
6. 导入整个模块
如果需要导入一个模块的所有导出,可以使用 * as 语法。
示例:
import * as myModule from './myModule.js';
myModule.greet();
7. 处理路径
在使用 require() 时,路径可以是相对路径或绝对路径。相对路径通常以 ./ 或 ../ 开头。
示例:
const myModule = require('./lib/myModule'); // 相对路径
const path = require('path'); // 内置模块
8. Node.js 的模块查找机制
Node.js 会按照以下顺序查找模块:
- 从缓存中查找已加载的模块。
- 如果未找到,检查内置模块。
- 如果还是未找到,查找相对路径模块。
- 如果还是未找到,查找全局模块。
9. 结论
Node.js 提供了灵活的模块导入机制,支持 CommonJS 和 ES6 模块规范。通过 require() 和 import,开发者可以方便地构建模块化的应用程序。在实际开发中,选择合适的模块导入方式可以提高代码的可读性和可维护性。