Menu Docs

Diferenças entre require() e load()

Os métodos require() e load() incluem arquivos e módulos em seus scripts para funcionalidade adicional. No entanto, require() e load() diferem em seus comportamentos e disponibilidade.

Você pode utilizar os seguintes tipos de scripts com mongosh:

  • mongosh scripts, que podem ser qualquer um dos seguintes:

    • Código inserido diretamente no REPL.

    • O arquivo mongoshrc.js .

    • Código carregado com o método load() .

  • Scripts Node.js, que são quaisquer scripts carregados com require(), incluindo pacotes npm. Esses scripts são sempre arquivos.

Os métodos require() e load() diferem na disponibilidade dependendo do tipo de script que você está utilizando.

  • Em mongosh scripts, require() e load() estão disponíveis.

  • Em scripts Node.js, apenas require() está disponível.

O tipo de script determina como você especifica caminhos de arquivo com require() ou load().

  • Em mongosh scripts:

    • require() usa o algoritmo de resolução de módulo Node.js padrão , a partir do diretório de trabalho atual da shell.

    • load() leva:

      • Um caminho absoluto, ou

      • Um caminho relativo. Ao usar um caminho relativo, o caminho é sempre interpretado como relativo ao diretório de trabalho atual do shell.

  • Em scripts Node.js , require() usa o algoritmo de resolução de módulo Node.js padrão , a partir do arquivo em que require() foi chamado.

Dica

Para retornar o diretório de trabalho atual do shell, execute o método pwd() do seu script.

Para alterar o diretório de trabalho do shell, use o método cd() em seu script.

Você pode carregar código externo em um arquivo de script do mongosh , como um pacote npm ou um script do mongosh separado.

  • Para carregar um script mongosh de outro script mongosh , use a variável de ambiente __dirname . A variável de ambiente __dirname retorna o caminho absoluto do diretório que contém o arquivo que está sendo executado.

    Exemplo

    Para carregar um script mongosh chamado test-suite.js de outro script mongosh , adicione a seguinte linha ao seu script:

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

    O uso da variável _dirname para especificar um caminho absoluto garante que o script separado que você está carregando não seja afetado por fatores externos, como o local onde mongosh começou.

  • Para carregar um script Node.js a partir de um script mongosh , use o método require() .

    Exemplo

    Para carregar a data-fns de um mongosh script chamado test-suite2.js, adicione as seguintes linhas ao script:

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

Existem dois padrões de embalagem para módulos Node.js.

Padrão de Embalagem
Funciona com require()

CommonJS (CJS)

Sim

ECMAScript Module (ES Module)

No

Não é possível require() um módulo ES em mongosh. Se você deseja usar a funcionalidade de um módulo ES, verifique se há uma versão CommonJS que você pode usar. Para mais informações, veja:

  • Os scripts mongosh podem usar a API mongosh .

  • Os scripts Node.js não têm acesso à API mongosh .

Por exemplo, a variável global db (usada para exibir o reconhecimento de data center atual) está disponível dentro de scripts mongosh . Não está disponível dentro de scripts Node.js.

Importante

mongosh Os scripts e os scripts Node.js são executados em contextos diferentes. Eles podem apresentar comportamentos diferentes quando o mesmo comando é executado em cada tipo de script, como retornar diferentes tipos de dados. Portanto, você pode observar resultados inesperados se você executar código mongosh dentro de um script Node.js.

Geralmente, você não deve manter código específico do mongosh dentro de scripts Node.js.