文档菜单
文档首页
/
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()方法。

    示例

    要从名为test-suite2.jsmongosh脚本中加载date-fns模块,请将以下行添加到您的脚本中

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

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

打包标准
与 require() 兼容
CommonJS (CJS)
ECMAScript 模块 (ES 模块)

您不能在 mongoshrequire ES 模块。如果您想使用 ES 模块的功能,请检查是否有可用的 CommonJS 版本。更多信息,请参见

  • mongosh 脚本可以使用 mongosh API。

  • Node.js 脚本没有访问 mongosh API 的权限。

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

重要

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

通常,您不应该在 Node.js 脚本中保留特定于 mongosh 的代码。

返回

包含文件和模块