CommonJS

CommonJS规范

CommonJS使用exports导出模块,require导入模块。exports是一个空对象,require是一个函数,参数传入模块的路径即可返回该模块导出的整个内容。

导出:

// 要隐藏的内部实现
let abc = 1;
// 要暴露给外部的接口
function test(){
  abc++;
  return abc;
}
// exports = {}
exports.test = test;
/*
  exports: {
       test: fn
  }
*/
exports.a = 456;

/*
  exports: {
       test: fn
       abc: 456
  }
*/

导入:

// node.js中导入模块,使用相对路径,并且必须以./或../开头
const utils = require('./utils.js');

console.log(utils.abc);// 456;

NodeJS对CommonJS的实现

  • 为了保证高效的执行,仅加载必要的模块,NodeJS只有执行到require函数时才会加载并执行模块。

  • 为了隐藏模块中的代码,NodeJS执行模块时,会将模块中的所有代码放置到一个函数中执行,以保证不污染全局变量。

(function(){
  // 模块中的代码
})()
  • 为了保证顺利的导出模块内容,nodejs做了以下处理

    • 在模块开始执行前,初始化一个值module.exports = {},module.exports即模块的导出值

    • 为了方便开发者便捷的导出,nodejs在初始化完module.exports后,又声明了一个变量exports = module.exports

(function(module){
     module.exports = {};
     var exports = module.exports;
     //模块中的代码
     return module.exports;
 })()
  • 为了避免反复加载同一个模块,nodejs默认开启了模块缓存,如果加载的模块已经被加载过了,则会自动使用之前的导出结果。

一些坑

CommonJS导出的是module.exports。我们也可以直接给module.exports重新赋值一个对象。

console.log(module.exports === exports); // true
module.exports = {
    test: function(){
        console.log('test');
    },
    abc: 123
}
// 由于给module.exports重新赋值为一个新对象,
// 而exports还是原来的{}。地址不一样所以不相等。
console.log(module.exports === exports); // false
// 导出
module.exports = {
    test: function(){
        console.log('test');
    },
    abc: 123
}
exports.abc = 456;
// 导入
const test = require('./utils');
console.log(test.abc); // 123

module.exports 可以直接赋值,但是exports直接赋值,导出的还是一个空对象。

// 可以直接赋值
module.exports = '123';
// exports直接赋值 
exports = '123'; // 导出还是为空对象
### 下载和安装支持 CommonJS 规范的模块或工具 为了下载和安装支持 CommonJS 规范的模块或工具,通常是在 Node.js 环境下操作。Node.js 自身即遵循 CommonJS 规范来处理模块定义与加载。 #### 使用 npm 安装模块 npm (Node Package Manager) 是随同 Node.js 一起安装的一个包管理器,它允许开发者轻松地发布和获取软件包。通过命令行可以方便地安装各种基于 CommonJS 的库: ```bash npm install <package-name> ``` 这条命令会在当前项目的 `node_modules` 文件夹内安装指定名称 `<package-name>` 对应的支持 CommonJS 规范的模块,并自动更新 `package.json` 中依赖列表[^1]。 #### 初始化新项目并设置 package.json 如果还没有初始化过一个新的 Node.js 应用程序,则可以通过如下命令创建必要的配置文件 `package.json`: ```bash npm init -y ``` 这会快速生成一个默认配置的 `package.json` 文件,其中包含了关于应用程序的信息以及所使用的依赖项版本控制信息。 #### 验证安装成功与否 一旦完成了某个特定模块的安装之后,可以在代码里尝试引入该模块以验证其是否正常工作。例如,在终端中启动 node REPL 或者编写一段简单的测试脚本: ```javascript const myModule = require('my-installed-package'); console.log(myModule); ``` 这段代码展示了如何利用 `require()` 函数按照 CommonJS 规范去加载已安装好的第三方库 `my-installed-package` 并打印出来查看结果[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值