尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
HoRain云--Node.js 模块导入
当你开始写 Node.js 项目时最先遇到的问题之一就是——如何导入模块module。在 Node.js 里模块就是可以重复使用的 JavaScript 文件它们之间通过导入import和导出export互相通信。Node.js 生态系统主要支持两种模块系统CommonJS和ES Modules (ESM)。模块系统规范文件扩展名导入方式导出方式CommonJSNode.js 早期使用.jsrequire()module.exports/exportsES Module (ESM)ECMAScript 标准.mjs或type: moduleimportexport/export defaultCommonJS 模块系统CommonJS 是 Node.js 最早也是最广泛使用的模块系统它采用同步加载的方式这意味着模块在加载时会阻塞程序的执行直到加载完成。导入和导出在 CommonJS 中你使用require()函数来导入模块使用module.exports或exports对象来导出模块。导出方式 math.js 文件代码// math.jsfunction add(a, b) {return a b;}module.exports { add };// 或者exports.add add;导入方式实例// app.jsconst math require(./math.js);console.log(math.add(2, 3)); // 5模块要想让外部访问自己的内容就需要使用 module.exports 或 exports 来导出实例// user.jsconst name Alice;const age 30;// 方式一使用 module.exports 导出单个对象或值module.exports {name: name,age: age,sayHello: () {console.log(Hello, my name is ${name}.);}};// 方式二使用 exports 导出多个具名变量// exports 是 module.exports 的一个引用exports.name name;exports.age age;exports.sayHello () {console.log(Hello, my name is ${name}.);};导入方式实例// main.jsconst user require(./user.js);console.log(user.name); // 输出: Aliceuser.sayHello(); // 输出: Hello, my name is Alice.// 也可以直接解构const { name, age } require(./user.js);console.log(name); // 输出: AliceCommonJS 特点同步加载适合服务器端环境因为模块通常都在本地文件系统中加载速度快。运行时加载require()可以在代码的任何位置调用这使得你可以根据条件来动态加载模块。缓存机制require()加载的模块会被缓存第二次导入时会直接从缓存中读取避免重复加载。ES ModuleESM规范ESM 是 JavaScript 官方的模块标准它采用异步加载并且是浏览器和现代 Node.js 应用的首选。在 ESM 中你使用 import 语句来导入模块使用 export 语句来导出模块。启用 ESM要在 Node.js 中使用 ESM你需要在 package.json 文件中添加 type: module或者将文件扩展名更改为 .mjs。// package.json { type: module }导出模块:实例// math.mjsexport function add(a, b) {return a b;}export default function multiply(a, b) {return a * b;}导入模块:实例// app.mjsimport multiply, { add } from ./math.mjs;console.log(add(2, 3)); // 5console.log(multiply(2, 3)); // 6启用方式文件扩展名用 .mjs或在 package.json 中添加{ type: module }ESM 支持两种导出方式具名导出 (Named Exports) 和 默认导出 (Default Export)。实例// user.mjs// 具名导出export const name Bob;export const age 25;// 默认导出const sayHello () {console.log(Hello, my name is ${name}.);};export default sayHello;导入方式实例// main.mjs// 导入具名导出import { name, age } from ./user.mjs;console.log(name); // 输出: Bob// 导入默认导出import sayHello from ./user.mjs;sayHello(); // 输出: Hello, my name is Bob.// 同时导入具名和默认导出import sayHello, { name } from ./user.mjs;console.log(name);sayHello();// 导入所有具名导出并将其作为对象的属性import * as user from ./user.mjs;console.log(user.name);user.default(); // 默认导出会作为 default 属性ESM 特点异步加载默认是异步加载不会阻塞主线程更适合浏览器环境但在 Node.js 中通常表现为同步加载。静态分析import和export语句在代码执行前就可以确定模块的依赖关系这使得工具如 Webpack、Vite可以进行更好的优化如Tree Shaking。严格模式ESM 模块默认在严格模式下运行。CommonJS 和 ESM 的区别项目CommonJSESM语法require/module.exportsimport/export加载机制运行时同步加载编译时静态加载默认支持Node.js 默认支持需.mjs或type: module适合场景后端脚本、老项目前后端现代项目、Tree-shaking是否可混用不能直接混用需额外配置不能直接混用需额外配置混合使用Node.js 在较新版本中支持两种模块系统共存。你可以在同一个项目中同时使用 CommonJS 和 ESM但需要注意以下几点ESM 中不能直接使用require()和module.exports。CommonJS 中不能直接使用import和export。如果想在 ESM 中导入 CommonJS 模块可以直接使用import语句ESM 会将其视为默认导出。// commonjs_module.js module.exports { data: hello }; // esm_module.mjs import commonModule from ./commonjs_module.js; console.log(commonModule.data); // 输出: hello如果想在 CommonJS 中导入 ESM 模块你需要使用动态import()函数。// esm_module.mjs export const name Bob; // commonjs_module.js async function loadESM() { const { name } await import(./esm_module.mjs); console.log(name); } loadESM();最佳实践建议对于新的项目强烈推荐使用 ES Modules (ESM)。它不仅是 JavaScript 的官方标准而且与现代前端工具链如 Vite、Next.js兼容性更好能够充分利用 Tree Shaking 等优化技术减少打包后的代码体积。如果你正在维护一个老旧的 CommonJS 项目并且不需要 ESM 的特性可以继续使用 CommonJS。但如果需要引入新的依赖或利用 ESM 的新特性可以考虑逐步迁移或者使用混合模式来过渡。
RELATED

相关推荐

HoRain云--CSS 分组 和 嵌套 选择器

HoRain云--CSS 分组 和 嵌套 选择器

分组选择器在样式表中有很多具有相同样式的元素。h1 { color:green; } h2 { color:green; } p { color:green; }为了尽量减少代码,你可以使用分组选择器。每个选择器用逗号分隔。在下面的例子中,我们对以上代码使用分组选择器:实例h1,h2,p { …

📅 2026/10/14 6:59:16
HoRain云--CSS padding(填充)

HoRain云--CSS padding(填充)

CSS padding(填充)是一个简写属性,定义元素边框与元素内容之间的空间,即上下左右的内边距。 padding(填充) 当元素的 padding(填充)内边距被清除时,所释放的区域将会受到…

📅 2026/9/12 3:54:12
学习FastAPI,定义模型时使用Pydantic

学习FastAPI,定义模型时使用Pydantic

在其他的web框架中,Django或Flask,都有相应的表单类用来校验前端数据的合法行,在FaskAPI中则用Pydantic来实现。Pydantic 是 FastAPI 的"数据守门员":你只用声明"我想要什么类型的数据、有什么规则"&#xff…

📅 2026/10/6 4:39:08
MORE NEWS

更多资讯

📰

特种作业操作证赵主任怎么选培训机构 电子证书怎么考

特种作业操作证赵主任怎么选培训机构 电子证书怎么考 找个工作不难,但手里没个特种作业操作证,连面试资格都没有。特别是像我们在信阳浉河区做市政公用工程的,很多岗位都要求持证上岗,而且现在国家全面推行电子证书,连面试都不带纸质证了。那问题来了,…

📰

机械人电工证怎么考才不白交培训费?官方报名入口全解析

机械人电工证怎么考才不白交培训费?官方报名入口全解析 怕考不过白交培训费?机械人电工证作为特种作业操作证的一种,越来越多从业者想通过它提升竞争力,但真正了解考试流程和备考方法的人却不多。尤其对于周口等地的转岗从业者来说,机械人电工证不仅是入…

📰

电工证培训都叫什么全流程办理指南 郑州报考避坑指南

电工证培训都叫什么全流程办理指南 郑州报考避坑指南 实操考试心里没底怕挂科,这几乎是所有打算报考电工证的朋友都面临的真实焦虑。尤其是像郑州这样的大城市,报考人数多、机构鱼龙混杂,很多人在选择培训时容易被误导,结果浪费时间、金钱甚至耽误了工作…

📰

延吉做特种作业操作证怎么报名?学历不高也能报上名的干货来了

延吉做特种作业操作证怎么报名?学历不高也能报上名的干货来了 你是不是总听说“特种作业操作证”是进工地、进厂子的硬门槛?但心里又在打鼓:“我学历不高,真的能报上名吗?”别急,这篇文章就是为像你这样的朋友量身打造的,…

📰

娄底电工证怎么查询?多久拿证能解决工地太忙的问题

娄底电工证怎么查询?多久拿证能解决工地太忙的问题 工地太忙根本没时间复习考试,这是大多数一线电工的真实写照。很多人在忙于施工、抢工期的同时,还要抽空准备电工证考试,既费时又费力。特别是对于在娄底从事建筑或市政工程的人来说,…

📰

电工证能偷补吗怎么报名

电工证能偷补吗怎么报名 你缺个电工证,但又赶着去面试?别急,先搞清楚【电工证能偷补吗】,再看怎么报名。在一线城市的工地、工厂、建筑公司,电工证几乎是硬性门槛,没有证连入职都不让进。尤其是你这种刚毕业的济源工程类学生,要是连基本的特种作业证都…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬