Trabalhar com caminhos de arquivo no Node.js

Concluído

Como um novo desenvolvedor na Tailwind Traders, você precisa saber como gerenciar caminhos para arquivos e pastas. Mas se você tivesse muitos arquivos ou pastas, a criação manual de caminhos poderia ser entediante. O Node.js fornece algumas constantes e utilitários internos para facilitar os caminhos dos arquivos.

Determinar o diretório atual com __dirname

Às vezes, você não sabe em qual diretório seu programa está sendo executado. Você precisa dele apenas para usar o caminho do diretório atual.

📂 stores
    📂 201
        📂 sales

O Node.js expõe o caminho completo para o diretório atual por meio da constante __dirname.

console.log(__dirname);

Se você tiver executado esse código na pasta sales na estrutura de pastas a seguir, o valor _dirname será:

/stores/201/sales

Trabalhar com caminhos com o módulo de caminho

Os caminhos são um assunto que surge com tanta frequência que o Node.js incluiu um módulo chamado path especificamente para trabalhar com caminhos.

Assim como o módulo fs, o módulo path é fornecido com o Node.js e não precisa ser instalado. Você só precisa fazer referência a ele na parte superior do seu arquivo.

const path = require("path");

Unir caminhos com path.join

O módulo path funciona com o conceito de caminhos de arquivos e pastas, que são apenas cadeias de caracteres. Por exemplo, se você quisesse obter o caminho para a pasta stores/201, poderia usar o módulo path para fazer isso.

const currentPath = path.join("stores", "201");
console.log(currentPath); // stores/201

const fullPath = path.join(__dirname, "stores", "201");
console.log(fullPath); // /nodejs-files/stores/201

O motivo pelo qual você usaria o módulo path em vez de concatenar cadeias de caracteres é que seu programa pode ser executado no Windows ou no Linux. O módulo path sempre formata caminhos corretamente para qualquer sistema operacional em que esteja sendo executado. No exemplo acima, path.join retornaria stores\201 no Windows, com uma barra invertida em vez de uma barra.

Determinar extensões de nome de arquivo com path.extname

O módulo path também pode identificar a extensão de um nome de arquivo. Se você tiver um arquivo e quiser identificar se ele é um arquivo JSON, poderá usar o método path.extname.

console.log(path.extname("sales.json"));

A saída é:

.json

Dica

O módulo path não se importa se as coisas realmente existem. Os caminhos são conceituais, não físicos. Trata-se apenas de criar e analisar cadeias de caracteres para você.

Tudo que você precisa saber sobre um arquivo ou caminho

O módulo path contém muitos métodos diferentes que fazem várias coisas. No entanto, você pode obter a maioria das informações necessárias sobre um caminho ou arquivo usando o método parse. Esse método retorna um objeto que contém o diretório atual no qual você está, o nome do arquivo, a extensão do nome de arquivo e até o nome do arquivo sem a extensão.

const currentPath = path.parse("stores/201/sales.json")
console.log(currentPath);

const fullPath = path.join(__dirname, "stores", "201", "/sales.json");
console.log(path.parse(fullPath));

A saída é:

{
  root: '',
  dir: 'stores/201',
  base: 'sales.json',
  ext: '.json',
  name: 'sales'
}
{
  root: '/',
  dir: '/workspaces/node-essentials/nodejs-files/stores/201',
  base: 'sales.json',
  ext: '.json',
  name: 'sales'
}

Há muitos métodos utilitários mais úteis no módulo path, mas os métodos explicados aqui são os principais conceitos que você provavelmente usará com mais frequência. No próximo exercício, você usará o módulo path para compor caminhos e identificará os arquivos .json.