Skip to content

CommonJS 规范

服务端 JS 模块化规范,来源于 NodeJS

特点:

  • 同步

关键表达式

js
// 导入模块A
var moduleA = require("./xxx.js")

// 导出
module.exports = {
  moduleB,
}

//
exports.moduleB = 1

CommonJS 的本质

栗子:

js
// main.js
console.log("this is commonjs")

var module_a = require("./module_a")

var module_b = require("./module_b")

;(function(params) {
  console.log(`this is a ${module_a.a}`)
  console.log(`this is b ${module_b.b}`)
})()
js
// module_a.js
console.log("this is module_a")

const a = [1]

module.exports = {
  a,
}
js
// module_b.js
var modulea = require("./module_a")

console.log("this is module_b")

const b = modulea.a

module.exports = {
  b,
}
js
// module_c.js
var modulea = require("./module_a")
console.log("this is module_c")
const c = modulea.a.concat([2])
module.exports = {
  c,
}
js
// module_d.js
var modulea = require("./module_a")
console.log("this is module_d")
const d = modulea.a.concat([2])
exports.d = d

image-20210514133911867

可以分析出: 从入口 main.js 执行开始,遇到require("xxx") 就会加载并执行此文件,其中如果之前已加载过此文件那么就不会重复执行。

那么一个文件的本质是什么?

js
;(function(exports, require, module, __filename, __dirname) {
  // 文件体
})()