Docs 菜单
Docs 主页
/
MongoDB Shell
/

和 之间的区别require()load()

在此页面上

  • mongosh 中的脚本类型
  • require() 和 load() 的可用性
  • require() 和 load() 的文件路径
  • require() 打包注意事项
  • 访问 mongosh API

require()load()方法在脚本中包含文件和模块以实现附加功能。 但是, require()load()的行为和可用性有所不同。

您可以将以下类型的脚本与mongosh结合使用:

  • mongosh 脚本,可以是以下任一内容:

    • 代码直接输入到 REPL 中。

    • mongoshrc.js文件。

    • 使用load()方法加载的代码。

  • Node.js 脚本,这是使用require()加载的任何脚本,包括 npm 包。 这些脚本始终是文件。

require()load()方法的可用性有所不同,具体取决于所使用的脚本类型。

  • mongosh脚本中, require()load()都可用。

  • 在 Node.js 脚本中,只有require()可用。

脚本的类型决定了如何使用require()load()指定文件路径。

  • mongosh脚本中:

    • require() 使用标准 Node.js 模块解析算法 ,从 shell 的当前工作目录开始。

    • load() 采用以下任一项:

      • 绝对路径,或

      • 相对路径。 使用相对路径时,该路径始终解释为相对于 Shell 的当前工作目录。

  • 在 Node.js 脚本中,require() 使用标准 Node.js 模块解析算法 ,从调用require() 的文件开始。

提示

要返回 Shell 的当前工作目录,请从脚本中运行pwd()方法。

要更改 Shell 的工作目录,请在脚本中使用cd()方法。

您可以在mongosh脚本文件中加载外部代码,例如 npm 包或单独的mongosh脚本。

  • 要从另一个mongosh脚本加载mongosh脚本,请使用__dirname环境变量。 __dirname环境变量返回包含正在执行的文件的目录的绝对路径。

    例子

    要从另一个mongosh脚本加载名为test-suite.jsmongosh脚本,请将以下行添加到脚本中:

    load(__dirname + '/test-suite.js')

    使用_dirname变量指定绝对路径可确保您正在加载的单独脚本不受外部因素(例如mongosh的启动位置)的影响。

  • 要从mongosh脚本加载 Node.js 脚本,请使用require()方法。

    例子

    要加载 date-fns mongoshtest-suite2.js模块, 添加到您的脚本脚本:

    const localRequire = require('date-fns').createRequire(__filename);
    const fileExports = localRequire('./test-suite2.js'); }

Node.js 模块有两种打包标准。

封装标准
与 require() 一起使用
CommonJS (CJS)
ECMAScript Module (ES Module)
No

您不能在 mongoshrequire() ES 模块。如果您想使用 ES 模块的功能,请检查是否有可以替代使用的 CommonJS 版本。有关更多信息,请参阅:

  • mongosh 脚本可以使用mongosh API。

  • Node.js 脚本无权访问mongosh API。

例如, db全局变量(用于显示当前数据库)在mongosh脚本中可用。 它在 Node.js 脚本中不可用。

重要

mongosh 脚本和 Node.js 脚本在不同的 上下文中 运行 。在每种类型的脚本中运行相同的命令时,它们可能会表现出不同的行为,例如返回不同的数据类型。 因此,如果在 Node.js脚本内运行mongosh代码,可能会出现意外结果。

一般来说,您不应在 Node.js 脚本中保留特定于 mongosh 的代码。

后退

包含文件和模块