require('module') 是什么?

简介: 关于 node 中 module 得解释

在很多框架中经常会看到导入 module 模块来使用,那么导入的 module 模块和文件中的 module 变量到底又有什么区别呢?

const Module = require('module');

module 变量

在每个模块中,module 变量是对代表当前模块的对象的引用。

Module {
  id: '.',
  exports: 2,
  parent: null,
  filename: '/Users/leinov/github/node-api/module/module.js',
  loaded: false,
  children:
   [ Module {
       id: '/Users/leinov/github/node-api/module/circle.js',
       exports: [Object],
       parent: [Circular],
       filename: '/Users/leinov/github/node-api/module/circle.js',
       loaded: true,
       children: [],
       paths: [Array] } ],
  paths:
   [ '/Users/leinov/github/node-api/module/node_modules',
     '/Users/leinov/github/node-api/node_modules',
     '/Users/leinov/github/node_modules',
     '/Users/leinov/node_modules',
     '/Users/node_modules',
     '/node_modules' ] }

node 在运行某个模块时会生成一个 module 对象,关于 module 对象具体是怎么生成的,是通过 Module 这个构造函数生成实例对象。

function Module(id = '', parent) {
  this.id = id;
  this.path = path.dirname(id);
  this.exports = {};
  this.parent = parent;
  updateChildren(parent, this, false);
  this.filename = null;
  this.loaded = false;
  this.children = [];
}

const module = new Module()

所以每个模块都是一个实例对象。那么如果我们想给实例对象添加公共方法,就要加在构造函数的原型上。

const Module = require('module');
Module.prototype._compile = function () {}

当与 Module 的实例交互时提供通用的实用方法。其实源码中已经暴露了很多方法,比如 createRequire 方法,用于构造 require 函数的文件名,返回 require 函数。

const Module = require('module');
const context = path.resolve('./src/package.json')
const require = Module.createRequire(context)

// sibling-module.js 是 CommonJS 模块。
const siblingModule = require('./sibling-module')

目的就是为了改变加载的位置,要从 src 这个目录里面加载 sibling-module 模块。

相关文章
|
17天前
bisec module 应用
bisec module 应用
10 0
|
5月前
nrm 安装后报错 Error [ERR_REQUIRE_ESM]: require() of ES Module
nrm 安装后报错 Error [ERR_REQUIRE_ESM]: require() of ES Module
574 0
|
11月前
Py3 ModuleNotFoundError: No module named ‘Crypto‘;ModuleNotFoundError: No module named Cryptodome‘
Py3 ModuleNotFoundError: No module named ‘Crypto‘;ModuleNotFoundError: No module named Cryptodome‘
91 0
|
11月前
|
JavaScript 小程序 前端开发
详解module.exports与exports,export与export default,import 与require
详解module.exports与exports,export与export default,import 与require
56 0
|
Web App开发 Dart JavaScript
剖析require、import、export、exports、module.exports以及export default 的基本用法
剖析require、import、export、exports、module.exports以及export default 的基本用法
导出与导入(require,import,module.exports,exports,export,export default)
导出与导入(require,import,module.exports,exports,export,export default)
63 0
|
异构计算
ModuleNotFoundError: No module named ‘mmcv._ext‘
最近想将mmsegmentation打包成exe进行使用,但是遇到了一个问题,在打包的过程中不会显示报错信息,但是在执行exe程序之后,exe会出现ModuleNotFoundError: No module named 'mmcv._ext'的报错,导致软件崩溃。
937 0
|
前端开发
Module理解及使用
Module理解及使用
120 0
|
JavaScript 小程序 前端开发
(区别、详解、使用)module.exports与exports,export与export default,import 与require
变量的导出涉及到四个关键字module.exports与exports,export与export default, 其中module.exports与exports是符合CommonJS模块规范的。
378 0
(区别、详解、使用)module.exports与exports,export与export default,import 与require
|
Python
ModuleNotFoundError: No module named 'utils'
ModuleNotFoundError: No module named 'utils'
1161 0