Estou criando uma interface de linha de comando do nó. Ele é instalado globalmente e usa um arquivo bin para executar.
Eu pretendo abrir uma janela de comando no diretório raiz dos arquivos nos quais estou trabalhando e, em seguida, basta executar o comando, mas não consegui determinar o diretório de trabalho atual, pois process.cwd()
está retornando o diretório do pacote do nó. Inicialmente, assumi que, como o código está sendo executado usando um arquivo em lotes como invólucro (é assim que os arquivos bin podem ser executados sem o nó no início), é impossível, mas o script de café consegue fazê-lo. Dei uma olhada na fonte do roteiro do café, mas não consegui segui-la (sem experiência suficiente).
Para testá-lo, crie um pacote com este arquivo package.json:
{
"name": "test-package",
"version": "1.0.0",
"bin": {
"test-package": "./bin/test-package"
},
"main": "/lib/test"
}
este arquivo de pacote de teste na lixeira:
#!/usr/bin/env node
var path = require('path');
var fs = require('fs');
var lib = path.join(path.dirname(fs.realpathSync(__filename)), '../lib');
require(lib + '/test');
Alguém poderia lançar alguma luz sobre isso.
e tente obter o diretório da linha de comandos dentro da lib / test.
fonte
process.chdir()
, existe alguma maneira de obter o original?var originalCwd = process.cwd();
execute o seuprocess.chdir()
e poderá retornar ao original posteriormente).../lib/test
portátil?../lib/test
é portátil, enquanto a contrapartida do Windows..\lib\test
não é ...Diretório de trabalho atual
Para obter o diretório de trabalho atual, você pode usar:
No entanto, esteja ciente de que alguns scripts, principalmente o gulp, mudarão o diretório de trabalho atual com
process.chdir()
.Caminho do módulo do nó
Você pode obter o caminho do módulo atual com:
__filename
__dirname
Diretório original (onde o comando foi iniciado)
Se você estiver executando um script na linha de comando e desejar o diretório original a partir do qual o script foi executado, independentemente do diretório em que o script está operando atualmente, você poderá usar:
Diretório original, ao trabalhar com scripts NPM
Às vezes, é desejável executar um script NPM no diretório atual, em vez da raiz do projeto.
Essa variável está disponível dentro dos scripts do pacote npm como:
Você deve estar executando uma versão recente do NPM. Se essa variável não estiver disponível, verifique se o NPM está atualizado.
Isso permitirá que você acesse o caminho atual em seu package.json, por exemplo:
fonte
process.env.INIT_CWD
retorna o dir depackage.json
Como alternativa, se você deseja obter apenas o diretório atual do script atual do NodeJS, tente algo simples como este. Observe que isso não funcionará na própria CLI do nó:
fonte
path.resolve('.')
também é uma opção confiável e limpa, porque quase semprerequire('path')
. Ele fornecerá o caminho absoluto do diretório de onde é chamado.fonte
Aqui está o que funcionou para mim:
fonte