什么是commonJS?
在node中,默认支持的模块化规范叫做CommonJS, 在CommonJS中,一个JS文件就是一个模块
如何使用?
CommonJS规范(有两种)
- 引入模块
- 使用require(‘模块路径’)函数来引入模块
- 引入自定义模块时
- 模块名要以./或../开头
- 扩展名可以省略
- 在CommonJS中,如果省略的js文件的拓展名,node会自动为文件补全扩展名
- 在定义模块时,模块中的内容默认是不能被外部看到的
- 可以通过exports来设置要向外部暴露的内容
- 访问exports的方式有两种:
- exports
- module.exports
- 当我们在其他模块中引入当前模块时,require函数返回的就是exports
- 可以将希望暴露给外部模块的内容设置为exports的属性
- 引入核心模块时
- 直接写核心模块的名字即可
- 也可以在核心模块前添加 node:
const a = 10
const b = 20
const obj = { name: "孙悟空" }
module.exports = a
// const a = require("./m.js")
const a = 10
const b = 20
const obj = { name: "孙悟空" }
module.exports.a = a
module.exports.b = b
//module.export 对象的方法
// const {a, b} = require("./m.js")
什么情况下node会将内容认为CommonJS模块:
- 使用.cjs为扩展名的文件 ***
- 当前的package.json的type属性为commonjs时,扩展名为.js的文件
- 当前的package.json不包含type属性时,扩展名为.js的文件
- 文件的扩展名是mjs、cjs、json、node、js以外的值时(type不是module时)
文件夹作为模块
//引用时直接引用主文件,默认index.js
CommonJS执行原理
所有CommonJS模块在执行时,都会被包装到一个函数中:
(function(exports, require, module, __filename, __dirname) {
// 模块代码会被放到这里
});