CommonJS 规范
NodeJS 模块系统使用了有轻微修改的 CommonJS 规范,浏览器不支持 CommonJS。
CommonJS 规范使用 require() 指定依赖,使用 exports 对象 定义自己的 API。
let fs = require("os");
module.exports = {
platformInfo: fs.platform()
}
require()
require() 可以导入 node_modules 目录中的文件, 可以导入 json 文件 ,可以导入自定义的 js 文件,可以导入内置核心模块:
require("os");
require("./api.js") // 可以不带后缀名
require("axios");
require("./config.json");
require 要不要赋值给变量?
require() 一个模块时,会 执行 里面的内容。所以要不要将 require() 赋值给变量,关键就是看 require() 有没有返回值,如果有返回值就把它赋值给变量,后面用得到。但是如果是一次性加载这个模块,不管它有没有返回值,以后不用了,那么也没有必要把它赋值给变量。
多次 require 相同模块会怎样?
require() 只会加载模块一次,然后把它放进缓存中,再遇到相同的模块不会加载了。比如在一个文件 A 里写了循环 10 次输出 hello world,在另外一个文件 B 里 require(A) 写了 100 次,最终仍是输出 hello world 10 次。
上面提到的缓存实际上是 require.cache
,这是一个保存着已经加载的模块的对象,如果把这个对象中关于某个已加载模块 C 的键值对删除,下次遇到 require(C) 时仍会加载。
IIFE (immediately invoked function expression)
IIFE 可以实现模块的类似功能,既隐藏了内部实现细节,又可以返回供其他模块调用的 API。
let moduleA = (function(){
return something;
})();
评论 (0)