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() 一起使用 |
---|---|
| 是 |
| No |
您不能在 mongosh
中 require()
ES 模块。如果您想使用 ES 模块的功能,请检查是否有可以替代使用的 CommonJS 版本。有关更多信息,请参阅:
访问 mongosh API
mongosh
脚本可以使用mongosh
API。Node.js 脚本无权访问
mongosh
API。
例如, db
全局变量(用于显示当前数据库)在mongosh
脚本中可用。 它在 Node.js 脚本中不可用。