Para encontrar o diretório que um script npm usa no seu Mac, verifique qual pacote possui o script e, em seguida, imprima o diretório de dentro desse script. O npm executa um script a partir da pasta do seu pacote, mesmo quando você inicia o npm run de outro lugar. Em um projeto com workspaces, o pacote do workspace selecionado pode ser a pasta relevante. Os passos abaixo ajudam você a identificar o caminho exato e a distingui-lo da pasta onde você digitou o comando.

1. Encontre o pacote e o script que você está executando

Abra o Terminal e vá para a pasta do projeto onde você normalmente executa o npm. O macOS usa o zsh por padrão no Terminal, embora o seu shell possa ser alterado. Use pwd para exibir o seu diretório atual e, em seguida, liste os arquivos para verificar se essa pasta contém um arquivo package.json. O guia do Terminal da Apple explica como inserir comandos no Terminal e usar ferramentas como o ls.

pwd
ls

Se você não tiver certeza de qual pacote define o script, inspecione o package.json na pasta atual. Você pode exibi-lo com cat package.json ou abri-lo em um editor de texto. Encontre o nome do script dentro do objeto scripts. Por exemplo, em "scripts": { "build": "node build.js" }, o nome do script a ser executado é build. Não presuma que a pasta raiz do projeto possui o script se este for um repositório com workspaces.

2. Verifique o diretório esperado pelo npm

Nas versões atuais do npm, os scripts são executados a partir da raiz da pasta do pacote, independentemente do diretório a partir do qual você invocou o npm run. Em um projeto padrão, essa é a pasta que contém o package.json do pacote. Em um projeto com workspaces, o npm pode executar o script no contexto de um workspace selecionado; o pacote do workspace é o que deve ser verificado. Consulte a documentação do npm sobre diretórios de trabalho de scripts e execução de scripts em workspaces.

Esse comportamento documentado é um bom ponto de partida, mas se o script alterar diretórios internamente ou se você precisar confirmar o que um comando específico enxerga, imprima o caminho durante a execução. Um comando shell como cd dentro do script pode alterar o diretório para os comandos que o seguem, portanto, a pasta do pacote por si só pode não contar toda a história.

3. Imprima o diretório de dentro do script

A verificação mais clara é adicionar temporariamente pwd no início do comando do script no package.json. Por exemplo, altere:

"build": "node build.js"

para:

"build": "pwd && node build.js"

Em seguida, execute o script como de costume:

npm run build

O caminho impresso antes do comando de build é o diretório de trabalho do shell naquele momento. Esse diagnóstico usa &&, portanto, node build.js só é executado se pwd for bem-sucedido. Após a verificação, remova o prefixo de diagnóstico e restaure o comando original. Revise o arquivo antes de salvar se o script original já utilizar operadores shell, aspas ou um comando wrapper; preserve a ordem e a sintaxe pretendidas.

Se o script for um arquivo Node.js e você puder editá-lo, outra verificação direta é adicionar temporariamente console.log(process.cwd()) perto do seu início. O Node documenta process.cwd() como o diretório de trabalho atual do processo Node.js. Isso relata o diretório que o Node vê quando a linha é executada; se o programa alterar posteriormente o seu diretório de trabalho, o valor pode mudar.

4. Leia o resultado e leve em consideração os workspaces

Compare o caminho impresso com o caminho exibido por pwd antes de você executar o npm. Eles podem ser diferentes: o diretório do script do npm é a raiz do pacote, enquanto o diretório do seu Terminal é onde você iniciou o comando. Por exemplo, se o seu Terminal inicia na raiz do repositório, mas você executa um script definido por um pacote em packages/site, o contexto do pacote do script pode ser esse workspace. O npm documenta a seleção de um workspace com --workspace; você também pode executar um script de dentro do diretório do workspace.

npm run build --workspace=site

Use o nome ou o caminho do workspace que corresponda à configuração de workspaces do projeto. Se a saída for inesperada, confirme se você selecionou o script e o workspace corretos e, em seguida, verifique se o script em si contém cd ou invoca outra ferramenta que altera diretórios. Um processo filho também pode ter sua própria configuração de diretório de trabalho; inspecione a configuração dessa ferramenta se o comportamento dela diferir do script pai.

O que INIT_CWD indica

O npm fornece INIT_CWD para o diretório em que você estava quando invocou o npm run. Esse valor pode ajudar quando um script precisa saber onde o chamador iniciou, mas não é o diretório de trabalho atual do script. Use pwd dentro do script shell ou process.cwd() dentro do Node.js para inspecionar o diretório que o processo em execução enxerga. A distinção é especialmente útil quando um caminho de arquivo relativo funciona a partir de um local de invocação, mas não de outro.

Para um diagnóstico rápido, comece com a regra da raiz do pacote do npm, selecione o workspace pretendido, se necessário, e imprima pwd dentro do script para confirmar o caminho real no momento em que ele é executado.

Fontes