模块化规范
CommonJS
基本语法
const test = require("./test"); //模块导入
//会先将test.js整个文件执行一遍,即使多次导入也只执行一遍,并且第二次获取的导入对象与第一次的导入对象是同一个对象
//若导出语句有多个,后面会覆盖前面的语句
//若有导出模块语句才会导出,否则会是空对象
module.exports = {}; //设置对象进行导出对象
//exports = {}; //错误写法
module.exports.key = "value"; //设置属性单个属性进行导出
exports.key = "value"; //简写
原理
在一个单独文件中使用var
关键字定义的变量并非全局变量,与浏览器端相同的node中也有全局对象,并非window
对象,而是global
对象,倘若不使用关键字直接定义变量则该变量属于全局对象global
CommonJS将单独一个文件中的代码都放在一个立即执行函数中,module
、exports
、require
是当参数进行传入的,可用以下语句进行检测
console.log(arguments.callee.toString());
// function (exports, require, module, __filename, __dirname) {
// console.log(arguments.callee.toString());
// }
//console.log(module.exports === exports); //true
//exports = {};无法导入任何东西的原因就是该变量仅仅是一个对象的指针,这样只是在函数内部改变了指针的指向,而并没有将该指向的内容修改
//__filename为当前js文件(包括路径)
//__dirname为当前js文件所在目录
Comments NOTHING