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() 一起使用 |
|---|---|
| 是 |
| No |
您不能在 mongosh 中 require() ES 模块。如果您想使用 ES 模块的功能,请检查是否有可以替代使用的 CommonJS 版本。有关更多信息,请参阅:
访问 mongosh API
mongosh脚本可以使用mongoshAPI。Node.js 脚本无权访问
mongoshAPI。
例如, db全局变量(用于显示当前数据库)在mongosh脚本中可用。 它在 Node.js 脚本中不可用。
重要
mongosh 脚本和 Node.js 脚本在不同的上下文中运行。在每种类型的脚本中运行相同的命令时,它们可能会表现出不同的行为,例如返回不同的数据类型。因此,如果在 Node.js脚本内运行mongosh 代码,可能会出现意外结果。
一般来说,您不应在 Node.js 脚本中保留特定于 mongosh 的代码。