浅谈Nodejs中的模块规范


本文摘自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('./lib');

require 默认返回一个空对象;新建两个文件,文件内容如下:

1

2

3

4

5

6

7

// lib.js

console.log('this is lib');

 

// index.js

console.log('start require')

var lib = require('./lib'); // 默认返回一个空对象

console.log('end require', lib);

来运行看看:node index.js

1.png

它也是可以通过 exports 来挂载一些属性的:字符串、函数、对象等类型的数据。

lib.js 添加一些代码

1

2

3

4

5

6

7

console.log('this is lib')

 

exports.hello = "world"

exports.add = function (a, b) {

  return a + b;

}

exports.obj = { hello: "Node" }

2.png

看来在 CommonJS 模块规范下,它是默认有一个 exports 这样的空对象的。

那既然 require 返回这样一个对象,那么修改和添加其中的属性会怎么样呢?

1

2

3

4

// index.js

// 既然 require 返回一个对象,那么修改和添加属性会怎么样呢?

lib.hello = 'node';

lib.update = '1234';

1

2

3

4

// lib.js

setTimeout(function() {

  console.log(exports)

}, 500)

3.png

可以看到,在 lib.js 加了一个 500ms 之后打印的内容是改变了的。所以通过 exports 输出的时候要注意这个拷贝的问题。可能有些同学会看到过这样的一段话:CommonJS 模块输出的是一个值的浅拷贝,ES6 模块输出的是值的引用。那么这是怎么回事呢?

阅读剩余部分

相关阅读 >>

html5+nodejs实现websocket即时通讯的示例代码分享

浅谈nodejs文件模块中的fs.mkdir和fs.rmdir

如何查看nodejs是否安装成功

nodejs怎么读写json文件?方法介绍

nodejs的npm常用命令集合

nodejs的爬虫框架superagent

nodejs学习之了解域名解析模块dns

详解检测和升级项目中node依赖的方法

一文快速了解nodejs中crypto模块的用法

nodejs+robotjs实现控制鼠标键盘功能

更多相关阅读请进入《nodejs》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...