和 之间的区别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()
方法。例子
要加载 date-fns
mongosh
test-suite2.js
模块, 添加到您的脚本脚本:const localRequire = require('date-fns').createRequire(__filename); const fileExports = localRequire('./test-suite2.js'); }
require() 打包注意事项
Node.js 模块有两种打包标准。
封装标准 | 与 require() 一起使用 |
---|---|
CommonJS (CJS) | 是 |
ECMAScript Module (ES Module) | No |
您不能在 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 的代码。