之间的区别require()
和 load()
《require()`和《load()`方法可以将文件和模块包含到脚本中,以增加功能。然而,《require()`和《load()`在行为和可用性方面有所不同。
在mongosh中的脚本类型
您可以使用以下类型的脚本与《mongosh》一起使用
《mongosh》脚本,可以是以下任何一种
直接输入到REPL中的代码。
的《mongoshrc.js》文件。
使用《load()`方法加载的代码。
Node.js脚本,这些脚本可以是任何使用《require()`加载的脚本,包括npm包。这些脚本始终是文件。
《require()`和《load()`的可用性
《require()`和《load()`方法的可用性取决于您使用的脚本类型。
在《mongosh》脚本中,两者《require()`和《load()`都可用。
在Node.js脚本中,只有《require()`可用。
require() 和 load() 的文件路径
脚本的类型决定了如何使用 require()
或 load()
指定文件路径。
在
mongosh
脚本中require()
使用标准Node.js 模块解析算法,从 shell 的当前工作目录开始。load()
可以接受绝对路径或
相对路径。当使用相对路径时,路径始终解释为相对于 shell 的当前工作目录。
在 Node.js 脚本中,
require()
使用标准 Node.js 模块解析算法,从调用require()
的文件开始。
在mongosh脚本中加载外部代码
您可以在一个mongosh
脚本文件中加载外部代码,例如npm包或单独的mongosh
脚本。
要从另一个
mongosh
脚本中加载mongosh
脚本,使用__dirname
环境变量。__dirname
环境变量返回正在执行的文件的目录的绝对路径。示例
要从另一个
mongosh
脚本中加载名为test-suite.js
的mongosh
脚本,请将以下行添加到您的脚本中load(__dirname + '/test-suite.js') 使用
__dirname
变量指定绝对路径可以确保您加载的独立脚本不会受到外部因素(如mongosh
的启动位置)的影响。要从
mongosh
脚本中加载Node.js脚本,请使用require()
方法。示例
要从名为
test-suite2.js
的mongosh
脚本中加载date-fns模块,请将以下行添加到您的脚本中const localRequire = require('date-fns').createRequire(__filename); const fileExports = localRequire('./test-suite2.js'); }
require() 打包注意事项
Node.js 模块有两种打包标准。
打包标准 | 与 require() 兼容 |
---|---|
CommonJS (CJS) | 是 |
ECMAScript 模块 (ES 模块) | 否 |
您不能在 mongosh
中 require
ES 模块。如果您想使用 ES 模块的功能,请检查是否有可用的 CommonJS 版本。更多信息,请参见
访问 mongosh API
mongosh
脚本可以使用mongosh
API。Node.js 脚本没有访问
mongosh
API 的权限。
例如,用于显示当前数据库的 db
全局变量(在 mongosh
脚本中可用)在 Node.js 脚本中不可用。
重要
mongosh
脚本和 Node.js 脚本在不同的 上下文中运行。当在每种类型的脚本中运行相同的命令时,它们可能会表现出不同的行为,例如返回不同的数据类型。因此,如果您在 Node.js 脚本中运行 mongosh
代码,可能会观察到意外的结果。
通常,您不应该在 Node.js 脚本中保留特定于 mongosh 的代码。