讲师中心 微信公众号

工具推荐

视频效率加速
AniShort
AniShort

AI短剧协同制作平台

Laper
Laper

剧本策划到成片协作

立刻MV
立刻MV

低成本歌曲 MV、视频生成

Seko
Seko

AI短剧一键生成成片

javascript中如何进行模块化开发_ES6模块与CommonJS有什么区别?

陌墨君_9810

陌墨君_9810

发布时间:2025-12-23 13:06:10

|

348人浏览过

|

来源于php中文网

原创

JavaScript模块化开发核心是拆分代码为独立可复用单元,ES6模块(静态解析、顶层导入、实时绑定)与CommonJS(动态加载、运行时require、值拷贝)在语法、时机、环境和行为上存在本质差异,二者不可混用但可通过工具桥接。

javascript中如何进行模块化开发_es6模块与commonjs有什么区别?

JavaScript模块化开发的核心是把代码拆分成独立、可复用的单元,ES6模块(import/export)和CommonJS(require/module.exports)是两种主流方案,它们在语法、加载时机、运行环境和行为逻辑上有本质差异。

ES6模块是编译时静态解析,依赖关系在代码分析阶段就确定

ES6模块的import必须写在文件顶层,不能放在条件语句或函数中;所有导入导出语句都会被提前“提升”,但不会执行模块体——直到真正被调用。这种静态特性让工具(如Webpack、Vite)能做摇树优化(Tree Shaking),自动剔除未使用的导出内容。

  • 必须用字面量字符串指定模块路径:不支持动态拼接路径,例如import('./utils/' + name + '.js')会报错(但可用import()动态导入替代)
  • 默认导出和具名导出分离明确:一个模块可同时有export default和多个export const xxx,导入时语法也对应区分
  • 绑定是实时的、只读的:导入的变量与原始模块中的变量保持绑定(类似引用),且不可重新赋值(但对象属性仍可修改)

CommonJS是运行时动态加载,模块输出是值的拷贝

Node.js早期采用CommonJS规范,require()可以在任意位置调用,支持条件加载、循环引用处理更灵活。每次require返回的是module.exports对象的一个浅拷贝(实际是缓存引用),模块代码在第一次require时同步执行。

logos-node
logos-node

在 Linux x86_64 上安装、更新或检查 Logos 区块链测试网验证节点。用于用户需要搭建 Logos 节点时使用。

下载
  • 模块输出是对象的属性:无论你导出什么,最终都挂载到module.exports上;exports只是它的快捷引用,直接赋值exports = {}会断开连接
  • 可以动态决定加载哪个模块:比如if (env === 'dev') require('./dev-tools')完全合法
  • 循环引用返回当前已执行的部分:A require B,B 又 require A,B 中拿到的是 A 当前已执行完的exports对象,不是空对象也不是完整对象

两者不能混用,但可通过工具桥接

ES6模块和CommonJS模块语法不兼容,直接在Node中用import加载.cjs文件或反之会报错。不过现代Node(v14+)通过"type": "module"字段或.mjs扩展名启用ESM支持;而打包工具如Webpack、Rollup能自动识别并转换两者。

立即学习“Java免费学习笔记(深入)”;

  • Node中混合使用需注意文件后缀和package.json配置:.mjs强制ESM,.cjs强制CommonJS,.js则取决于"type"字段
  • ESM中想用CommonJS模块,可以直接import,Node会自动包装:如import _ from 'lodash'没问题,但lodash本身是CommonJS,Node内部做了适配
  • CommonJS中想用ESM模块,只能用await import():因为require无法加载ESM,异步动态导入是唯一方式

实际项目中怎么选?看环境和目标

浏览器原生支持ES6模块(<script type="module"></script>),现代前端工程基本统一用ES6语法;Node服务端早期多用CommonJS,但新项目推荐启用ESM。二者共存是过渡常态,关键在于理解差异,避免踩坑。

  • 写库时建议同时提供两种格式:用exports字段在package.json中分别指定"import"和"require"入口
  • 调试时注意模块类型报错信息:如Cannot use import statement outside a module说明当前上下文是CommonJS,需检查文件类型或运行参数
  • 不要手动修改exports和module.exports混用:比如先exports.a = 1再module.exports = {b: 2}会导致前者丢失

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2295

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

3742

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

1236

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

4339

2025.09.10

es6新特性
es6新特性

es6新特性有:1、块级作用域变量;2、箭头函数;3、模板字符串;4、解构赋值;5、默认参数;6、 扩展运算符;7、 类和继承;8、Promise。本专题为大家提供es6新特性的相关的文章、下载、课程内容,供大家免费下载体验。

305

2023.07.17

es6新特性有哪些
es6新特性有哪些

es6的新特性有:1、块级作用域;2、箭头函数;3、解构赋值;4、默认参数;5、扩展运算符;6、模板字符串;7、类和模块;8、迭代器和生成器;9、Promise对象;10、模块化导入和导出等等。本专题为大家提供es6新特性的相关的文章、下载、课程内容,供大家免费下载体验。

406

2023.08.04

JavaScript ES6新特性
JavaScript ES6新特性

ES6是JavaScript的根本性升级,引入let/const实现块级作用域、箭头函数解决this绑定问题、解构赋值与模板字符串简化数据处理、对象简写与模块化提升代码可读性与组织性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

395

2025.12.24

require的用法
require的用法

require的用法有引入模块、导入类或方法、执行特定任务。想了解更多require的相关内容,可以阅读本专题下面的文章。

1975

2023.11.27

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

40

2026.11.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WebStorm 官方调试文档
WebStorm 官方调试文档

共0课时 | 0人学习

React 教程
React 教程

共58课时 | 12.5万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 6.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn