本文摘自PHP中文网,作者青灯夜游,侵删。
本篇文章给大家详细了解一下Nodejs中的模块规范。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。模块规范是构建一个大型 Node.js 应用的基础,所以非常重要;Node.js 模块规范也就是 CommonJS 模块规范,下面来简单了解一下吧。【推荐学习:《nodejs 教程》】
CommonJS 模块规范
以前加载 JS 文件的唯一方式是通过 <script>
标签引入,这个会有什么问题呢?
- 脚本变多时,需要手动管理加载的顺序;脚本越多就越难管理。
- 不同脚本之间的逻辑调用,需要通过全局变量的方式。
- 没有
html
的时候怎么引用 JS 文件呢?这个例子就是 Node.js。
于是 Node.js 就有了 CommonJS 模块规范,而 Webpack 也是兼容了 CommonJS 的写法,让我们可以用 CommonJS 规范来写前端代码。
CommonJS 模块规范是 JavaScript 社区发起的,它在 Node.js 上得到应用并推广,后续也影响到了浏览器端 JavaScript。
require
require
是 CommonJS 模块规范的 API,用来引入要使用的文件。比如引入 lib.js
:
1 |
|
require
默认返回一个空对象;新建两个文件,文件内容如下:
1 2 3 4 5 6 7 |
|
来运行看看:node index.js
它也是可以通过 exports
来挂载一些属性的:字符串、函数、对象等类型的数据。
在 lib.js
添加一些代码
1 2 3 4 5 6 7 |
|
看来在 CommonJS 模块规范下,它是默认有一个 exports
这样的空对象的。
那既然 require
返回这样一个对象,那么修改和添加其中的属性会怎么样呢?
1 2 3 4 |
|
1 2 3 4 |
|
可以看到,在 lib.js
加了一个 500ms
之后打印的内容是改变了的。所以通过 exports
输出的时候要注意这个拷贝的问题。可能有些同学会看到过这样的一段话:CommonJS 模块输出的是一个值的浅拷贝,ES6 模块输出的是值的引用。那么这是怎么回事呢?
相关阅读 >>
html5+nodejs实现websocket即时通讯的示例代码分享
浅谈nodejs文件模块中的fs.mkdir和fs.rmdir
更多相关阅读请进入《nodejs》频道 >>

Vue.js 设计与实现 基于Vue.js 3 深入解析Vue.js 设计细节
本书对 Vue.js 3 技术细节的分析非常可靠,对于需要深入理解 Vue.js 3 的用户会有很大的帮助。——尤雨溪,Vue.js作者