《JavaScript 高级程序设计 v4》— 模块

《JavaScript 高级程序设计 v4》— 模块

xiaolu
2022-02-18 / 0 评论 / 8 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2022年02月20日,已超过170天没有更新,若内容或图片失效,请留言反馈。

CommonJS 规范

NodeJS 模块系统使用了有轻微修改的 CommonJS 规范,浏览器不支持 CommonJS。

CommonJS 规范使用 require() 指定依赖,使用 exports 对象 定义自己的 API。

let fs = require("os");
module.exports = {
  platformInfo: fs.platform()
}

require()

NodeJS 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

评论 (0)

取消