CommonJs规范

本文详细介绍了Node.js中CommonJS模块系统的导出和导入机制,包括使用`module.exports`和`exports`的区别,以及如何通过`require`函数加载用户自定义模块和内置模块。还探讨了文件夹作为模块的工作方式和模块内部变量的封装原理。
摘要由CSDN通过智能技术生成


在node中,默认支持的模块化规范叫做CommonJS,它使得 JavaScript 代码可以更好地组织、复用和维护。
在CommonJS中,一个js文件就是一个模块


1. CommonJS 模块的导出

1.1 使用 module.exports 导出单个变量、函数或对象:1

// math.js
const sum = (a, b) => a + b;
const multiply = (a, b) => a * b;
module.exports = { sum, multiply };//暴露这两个函数


const a = 10
const b = 20
const obj = { name: "孙悟空" }

module.exports.a = a
module.exports.b = b

// const {a, b} = require("./m.js")

1.2 使用 exports 导出多个变量或函数(以添加属性的方法),但不能直接给它自身赋值:

// math.js
exports.sum = (a, b) => a + b;
exports.multiply = (a, b) => a * b;
//错误写法
exports=sum
exports=multiply

2. CommonJS 模块的导入

2.1使用 require 函数导入文件模块(用户自定义)
  • 使用require(“模块的路径”)函数来引入模块
    • 模块名要以./ 或 …/开头
      • 扩展名可以省略(除了扩展名是.cjs)
        在 JavaScript 中,引入模块时可以省略文件扩展名。当引入的模块是 JavaScript 文件(.js)、JSON 文件(.json)和node(.node)时,可以不写扩展名,Node.js 会根据需要自动解析文件类型并加载对应的模块。
        * 如果没有.js 后缀的同名文件它会寻找 .json后缀的。(如果两个后缀名都有,则优先导入后缀名为.js的)
        .js > .json >.node
2.2使用 require 函数导入核心模块(Node.js 内置的模块)
  • 直接写核心模块的名字即可
  • 也可以在核心模块前添加 node:
// main.js
const math = require('./math.js');
console.log(math.sum(2, 3)); // 输出 5
console.log(math.multiply(2, 3)); // 输出 6
2.3文件夹作为模块

当我们使用一个文件夹作为模块时,文件夹中必须有一个模块作为主文件。如果文件夹中含有package.json文件且文件中设置了main属性,则main属性指定的文件会成为主文件,导入模块时就会导入该文件(主文件)。如果没有package.json,则node会按照index.js、index.node的顺序寻找主文件。

//01module.js
// reauire是用来加载模块的,它会把引进来的东西作为返回值返回
// const result = require('./外部')
const result = require('./文件')//它会执行引入模块内的代码但是它的返回值就是模块内导出(暴露/exports/module.exports)的东西,如果模块未导出(暴露)任何东西,那么它就是空
console.log(result)

被导入的文件夹
在这里插入图片描述
index.js


console.log('我是入口')
require('./a')
require('./b')
require('./c')
require('./d')
// console.log('ff')`

a.js

console.log('我是a')

b.js

console.log('我是b')

c.js

console.log('我是c')

d.js

console.log('我是d')

在这里插入图片描述
注意此时打印result内容为空,这是因为虽然引入了,但是被引入发的模块没有暴露东西(在模块内部任何变量或其他对象都是私有的,需要手动暴露)
用module.exports暴露后

//index.js
console.log('我是入口')
require('./a')
require('./b')
require('./c')
require('./d')
// console.log('ff')`
const a = 10
const b = 20
module.exports.a = a
module.exports.b = b

再次执行,result对象内为我们暴露的东西
在这里插入图片描述

2.4模块的原理
(function(exports, require,module,_filename,__dirname)
let a= 10
let b=20
});

被引入的模块都是被包装到一个函数里执行。
exports, require,module,_filename,__dirname可以直接用的原因不是因为它们是全局变量,而是因为它们是实参。


  1. 用module.exports导出和用exports导出有什么异同?
    答:他俩都是对象,但是exports是module.exports的引用,所以exports只能添加属性(exports直接赋值会改变exports的引用,而不会改变module.exports的引用,从而起不到导出的效果),不能直接赋值,而module.exports可以直接赋值。 ↩︎

  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在CommonJS规范中,引入axios库的写法如下: ``` const axios = require('axios'); ``` 其中,`require`是CommonJS规范中用于引入模块的关键字,`axios`是需要引入的模块名。通过这种方式,我们可以在Node.js环境中使用axios库的功能。 ### 回答2: CommonJS 是一种模块化规范,是 Node.js 默认的模块化规范之一。它规定了如何定义、导出和导入模块,让 JavaScript 实现了代码的模块化。 如果想要在项目中使用 axios 库,就需要按照 CommonJS 规范引入它。下面是引入 axios 库的步骤。 1. 首先,需要安装 axios 库。可以使用 npm 或者 yarn 安装,命令如下: ``` npm install axios ``` 或者 ``` yarn add axios ``` 2. 在需要使用 axios 库的文件中,通过 require 方法引入它: ```javascript const axios = require('axios'); ``` 这里的 `require` 是 CommonJS 规范中用于加载模块的方法。要想使用 `require` 方法,必须在 Node.js 环境中运行 JavaScript 代码。如果在浏览器环境中使用 CommonJS 规范,需要使用工具将 CommonJS 代码转换成浏览器可以识别的代码。 3. 现在就可以使用 axios 了。例如,可以使用 `axios.get` 方法发起一个 GET 请求: ```javascript axios.get('/user') .then(function (response) { console.log(response.data); }) .catch(function (error) { console.log(error); }); ``` 在这个例子中,使用 `axios.get` 方法发送了一个 GET 请求,请求 URL 是 `/user`。如果请求成功,`then` 方法中的回调函数会被调用,并输出响应数据。如果请求失败,`catch` 方法中的回调函数会被调用,并输出错误信息。 总之,使用 CommonJS 规范引入 axios 库,只需要在文件中使用 `require` 方法引入 axios,并按照 axios 的 API 发送请求即可。 ### 回答3: CommonJS 是 Node.js 最初提出的一个模块规范,可以在 Node.js 环境下使用,通过 require 方法引入第三方库。Axios 是一个流行的 HTTP 客户端,用于发送 AJAX 请求并处理响应数据。 在 CommonJS 规范下,引入 Axios 库的写法如下: 1.安装 Axios 使用 npm 安装 Axios ``` npm install axios --save ``` 2.引入 Axios 在需要使用 Axios 的模块中,通过 require 方法引入 Axios: ``` const axios = require('axios'); ``` 3.使用 Axios 使用 Axios 发送 HTTP 请求并处理响应数据: ``` axios.get('https://jsonplaceholder.typicode.com/users') .then(response => { console.log(response.data); }) .catch(error => { console.log(error); }); ``` 以上是在 CommonJS 规范下使用 Axios 的基本流程。引入 Axios 后即可使用其提供的 HTTP 请求和响应处理方法,轻松完成前端与服务端之间的数据交互。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值