Eu tenho um servidor Web escrito em Node.js e gostaria de iniciar com uma pasta específica. Não sei como acessar argumentos em JavaScript. Estou executando o nó assim:
$ node server.js folder
Aqui server.js
está o código do meu servidor. A ajuda do Node.js diz que isso é possível:
$ node -h
Usage: node [options] script.js [arguments]
Como eu acessaria esses argumentos em JavaScript? De alguma forma, não consegui encontrar essas informações na web.
process.argv[n]
onden
é o índice baseado em zeronode [options] [ -e script | script.js ] [arguments]
ounode debug script.js [arguments]
. por exemplo:node --harmony script.js balala
ounode --no-deprecation --enable-ssl2 script.js balala
, podemos usar process.execArgv com process.argvPara normalizar os argumentos como uma função javascript regular receberia, eu faço isso nos meus scripts de shell node.js.
Observe que o primeiro argumento geralmente é o caminho para o nodejs e o segundo argumento é o local do script que você está executando.
fonte
execArgv
são não noargv
modo que o 2 é o suficienteprocess.argv.splice(process.execArgv.length + 2)
: para um comandonode --harmony script.js --version
, oprocess.argv
é['/usr/local/bin/node', 'script.js', '--version']
. As bandeiras NÃOnode
estão incluídas !process.argv
A resposta correta atualizada para isso é usar a biblioteca minimista . Costumávamos usar otimista de nós, mas ele foi descontinuado.
Aqui está um exemplo de como usá-lo, retirado diretamente da documentação minimista:
-
-
fonte
Resposta de 2018 com base nas tendências atuais em estado selvagem:
Análise de argumento javascript de baunilha:
Isso retorna:
Documentos oficiais
Pacotes NPM mais usados para análise de argumento:
Minimista : Para análise mínima de argumentos.
Commander.js : módulo mais adotado para análise de argumentos.
Miau : alternativa mais leve ao Commander.js
Yargs : Análise de argumento mais sofisticada (pesada).
Vorpal.js : aplicativos de linha de comando maduros / interativos com análise de argumento.
fonte
Otimista (otimista de nós)
Confira a biblioteca otimista , é muito melhor do que analisar as opções de linha de comando manualmente.
Atualizar
O Optimist está obsoleto. Tente yargs, que é um garfo ativo de otimista.
fonte
Várias ótimas respostas aqui, mas tudo parece muito complexo. Isso é muito semelhante ao modo como os scripts bash acessam os valores dos argumentos e já é fornecido como padrão no node.js, como o MooGoo apontou. (Apenas para torná-lo compreensível para alguém novo no node.js)
Exemplo:
fonte
Commander.js
Funciona muito bem para definir suas opções, ações e argumentos. Ele também gera as páginas de ajuda para você.
Prontamente
Funciona muito bem para obter informações do usuário, se você gosta da abordagem de retorno de chamada.
Co-Prompt
Funciona muito bem para obter informações do usuário, se você gosta da abordagem do gerador.
fonte
Nenhum Libs com sinalizadores formatados em um objeto simples
Exemplos
Simples
entrada
resultado
Mundo real
entrada
resultado
fonte
= longArg[1]
você poderia escrever= longArg.length > 1 ? longArg[1] : true;
Isso iria deixá-lo passar este tipo de argumento:node config/build.js --flag1 --flag2
Biblioteca Stdio
A maneira mais fácil de analisar argumentos da linha de comandos no NodeJS é usando o módulo stdio . Inspirado no
getopt
utilitário UNIX , é tão trivial quanto a seguir:Se você executar o código anterior com este comando:
O
ops
objeto será o seguinte:Então você pode usá-lo como quiser. Por exemplo:
As opções agrupadas também são suportadas, para que você possa escrever em
-om
vez de-o -m
.Além disso,
stdio
pode gerar uma saída de ajuda / uso automaticamente. Se você ligar,ops.printHelp()
obterá o seguinte:A mensagem anterior é mostrada também se uma opção obrigatória não for fornecida (precedida pela mensagem de erro) ou se for especificada incorretamente (por exemplo, se você especificar um único argumento para uma opção e ela precisar de 2).
Você pode instalar o módulo stdio usando o NPM :
fonte
Se o seu script for chamado myScript.js e você quiser passar o nome e o sobrenome, 'Sean Worthington', como argumentos abaixo:
Então, dentro do seu script, você escreve:
fonte
command-line-args vale uma olhada!
Você pode definir opções usando os principais padrões de notação ( saiba mais ). Esses comandos são todos equivalentes, configurando os mesmos valores:
Para acessar os valores, primeiro crie uma lista de definições de opções descrevendo as opções que seu aplicativo aceita. A
type
propriedade é uma função setter (o valor fornecido é passado por isso), fornecendo controle total sobre o valor recebido.Em seguida, analise as opções usando commandLineArgs () :
options
agora se parece com isso:Uso avançado
Além do uso típico acima, você pode configurar argumentos de linha de comando para aceitar formulários de sintaxe mais avançados.
Sintaxe baseada em comando (estilo git) no formato:
Por exemplo.
Sintaxe de comando e subcomando (estilo docker) no formato:
Por exemplo.
Geração de guia de uso
Um guia de uso (normalmente impresso quando
--help
definido) pode ser gerado usando o uso da linha de comando . Veja os exemplos abaixo e leia a documentação para obter instruções sobre como criá-los.Um exemplo típico de guia de uso.
O guia de uso do polímero-cli é um bom exemplo da vida real.
Leitura adicional
Há muito mais para aprender, consulte o wiki para exemplos e documentação.
fonte
partial
estopAtFirstUnknown
. Veja os documentos .Existe um aplicativo para isso. Bem, módulo. Bem, mais de um, provavelmente centenas.
Yargs é um dos mais divertidos, seus documentos são legais de ler.
Aqui está um exemplo da página github / npm:
A saída está aqui (lê opções com traços, etc, curto e longo, numérico, etc.).
fonte
Aqui está minha solução 0-dep para argumentos nomeados:
Exemplo:
Nota: Naturalmente, isso falhará quando o argumento contiver a
=
. Isso é apenas para uso muito simples.fonte
Provavelmente, é uma boa ideia gerenciar sua configuração de maneira centralizada usando algo como nconf https://github.com/flatiron/nconf
Ajuda a trabalhar com arquivos de configuração, variáveis de ambiente, argumentos da linha de comando.
fonte
sem librairies: usando Array.prototype.reduce ()
para este comando
node index.js count=2 print debug=false msg=hi
Além disso,
nós podemos mudar
por (muito mais tempo)
analisar automaticamente Boolean & Number
fonte
count
ec
(c
como um apelido / atalho paracount
)?Passar, analisar argumentos é um processo fácil. O Node fornece a propriedade process.argv, que é uma matriz de cadeias, que são os argumentos que foram usados quando o Node foi chamado. A primeira entrada da matriz é o executável do Nó e a segunda entrada é o nome do seu script.
Se você executar o script com os argumentos abaixo
Arquivo: args.js
Você terá uma matriz como
fonte
Se você deseja executar algo como isto:
-
Ou algo como:
-
fonte
proj.js
Terminal:
Resultado:
Explicação:
0
: O diretório do node.exe na sua usinagem (C: \ Arquivos de Programas \ nodejs \ node.exe ')1
: O diretório do seu arquivo de projeto. (proj.js)2
: Seu primeiro argumento para o nó (arg1)3
: Seu segundo argumento para o nó (arg2)4
: Seu terceiro argumento para o nó (arg3)seus argumentos reais iniciam o
2nd
índice doargv
array, ou sejaprocess.argv[2]
.fonte
Você pode acessar argumentos da linha de comando usando
system.args
. E eu uso a solução abaixo para analisar argumentos em um objeto, para que eu possa obter qual deles quero pelo nome.agora você não precisa conhecer o índice do argumento. use-o como
args.whatever
fonte
map
propriedade é indefinida.Você pode analisar todos os argumentos e verificar se eles existem.
arquivo: parse-cli-argument.js:
Do que apenas:
fonte
Sem bibliotecas
Se você quiser fazer isso no JS / ES6 de baunilha, poderá usar a seguinte solução
trabalhou apenas em NodeJS> 6
E esse comando
produzirá o seguinte resultado
ps Corrija o código no mapa e reduza a função se encontrar uma solução mais elegante, obrigado;)
fonte
let args = process.argv.slice(2).reduce((acc, arg) => { let [k, v] = arg.split('=') acc[k] = v return acc }, {})
Embora as respostas acima sejam perfeitas e alguém já tenha sugerido yargs, usar o pacote é realmente fácil. Este é um pacote interessante que facilita a transmissão de argumentos para a linha de comando.
Visite https://yargs.js.org/ para obter mais informações.
fonte
Passar argumentos é fácil, e recebê-los é apenas uma questão de ler o processo.argv array O Node torna acessível de qualquer lugar, basicamente. Mas com certeza você deseja lê-los como pares de chave / valor, portanto precisará de um pedaço de script para interpretá-lo.
Joseph Merdrignac postou um belo usando o método reduzir, mas contava com uma
key=value
sintaxe em vez de-k value
e--key value
. Eu o reescrevi muito mais feio e mais longo para usar esse segundo padrão, e vou publicá-lo como resposta, porque ele não se encaixa como um comentário. Mas faz o trabalho.Com esse código, um comando
node script.js alpha beta -charlie delta --echo foxtrot
forneceria o seguinte objetofonte
A maneira mais simples de recuperar argumentos no Node.js é através da matriz process.argv. Este é um objeto global que você pode usar sem importar nenhuma biblioteca adicional para usá-lo. Você simplesmente precisa passar argumentos para um aplicativo Node.js., como mostramos anteriormente, e esses argumentos podem ser acessados no aplicativo por meio da matriz process.argv.
O primeiro elemento da matriz process.argv sempre será um caminho do sistema de arquivos apontando para o nó executável. O segundo elemento é o nome do arquivo JavaScript que está sendo executado. E o terceiro elemento é o primeiro argumento que foi realmente passado pelo usuário.
Tudo o que esse script faz é percorrer a matriz process.argv e imprimir os índices, juntamente com os elementos armazenados nesses índices. É muito útil para depuração se você questionar quais argumentos você está recebendo e em que ordem.
Você também pode usar bibliotecas como yargs para trabalhar com argumentos de linha de comunicação.
fonte
Solução TypeScript sem bibliotecas:
Entrada:
ts-node index.js -p param --parameter parameter
Resultado:
{ p: 'param ', parameter: 'parameter' }
fonte
process.argv
é seu amigo, a captura de argumentos de linha de comando é suportada nativamente no Nó JS. Veja o exemplo abaixo:fonte
conforme indicado nos documentos do nó A propriedade process.argv retorna uma matriz que contém os argumentos da linha de comandos passados quando o processo Node.js. foi iniciado.
Por exemplo, assumindo o seguinte script para process-args.js:
Ativando o processo Node.js como:
Geraria a saída:
fonte
A maioria das pessoas deu boas respostas. Eu também gostaria de contribuir com algo aqui. Estou fornecendo a resposta usando a
lodash
biblioteca para iterar todos os argumentos da linha de comando que transmitimos ao iniciar o aplicativo:Para executar o código acima, basta executar os seguintes comandos:
O resultado será:
fonte
A melhor maneira de passar argumentos de linha de comando para um programa Node.js. é usando uma interface de linha de comando (CLI)
Existe um módulo npm bacana chamado nodejs-cli que você pode usar.
Se você deseja criar um sem dependências, eu tenho um no meu Github, se você quiser conferir, é realmente muito simples e fácil de usar, clique aqui .
fonte
Solução sem dependência do estilo ES6:
fonte