commonJS规范

245 阅读1分钟

什么是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模块:

  1. 使用.cjs为扩展名的文件 ***
  2. 当前的package.json的type属性为commonjs时,扩展名为.js的文件
  3. 当前的package.json不包含type属性时,扩展名为.js的文件
  4. 文件的扩展名是mjs、cjs、json、node、js以外的值时(type不是module时)

文件夹作为模块

//引用时直接引用主文件,默认index.js

CommonJS执行原理

所有CommonJS模块在执行时,都会被包装到一个函数中:

(function(exports, require, module, __filename, __dirname) {
// 模块代码会被放到这里
});