Execute scripts que definem e usam variáveis de ambiente entre plataformas
Aviso: o Cross-ENV ainda funciona bem, mas está no modo de manutenção. Nenhum novo recurso será adicionado, apenas bugs graves e comuns serão corrigidos e só serão mantidos atualizados com o Node.js ao longo do tempo. Saber mais
A maioria dos avisos do comando do Windows irá engasgar quando você definir variáveis de ambiente com NODE_ENV=production como essa. (A exceção é bash no Windows, que usa o Bash nativo.) Da mesma forma, há uma diferença na forma como os comandos do Windows e Posix utilizam variáveis de ambiente. Com Posix, você usa: $ENV_VAR e no Windows você usa %ENV_VAR% .
cross-env faz com que você possa ter um único comando sem se preocupar em definir ou usar a variável de ambiente corretamente para a plataforma. Basta configurá-lo como faria se estiver em execução em um sistema POSIX, e cross-env cuidará de configurá-lo corretamente.
cross-env vs cross-env-shell Este módulo é distribuído via NPM, empacotado com o nó e deve ser instalado como uma das devDependencies do seu projeto:
npm install --save-dev cross-env
AVISO! Certifique -se de que, ao instalar pacotes, soletra as coisas corretamente para evitar a instalação de malware equivocada
NOTA: A versão 7 do Cross-ENV suporta apenas Node.js 10 e superior, para usá-lo no Node.js 8 ou inferior Instalação Versão 6
npm install --save-dev cross-env@6
Eu uso isso nos meus scripts npm:
{
"scripts" : {
"build" : " cross-env NODE_ENV=production webpack --config build/webpack.config.js "
}
} Por fim, o comando executado (usando cross-spawn ) é:
webpack --config build/webpack.config.js
A variável de ambiente NODE_ENV será definida por cross-env
Você pode definir várias variáveis de ambiente por vez:
{
"scripts" : {
"build" : " cross-env FIRST_ENV=one SECOND_ENV=two node ./my-program "
}
}Você também pode dividir um comando em vários ou separar a declaração de variáveis de ambiente da execução do comando real. Você pode fazer desta maneira:
{
"scripts" : {
"parentScript" : " cross-env GREET= " Joe " npm run childScript " ,
"childScript" : " cross-env-shell " echo Hello $GREET " "
}
} Onde childScript detém o comando real para executar e parentScript define as variáveis de ambiente a serem usadas. Então, em vez de executar o ChildScript, você executa o pai. Isso é bastante útil para lançar o mesmo comando com diferentes variáveis ENV ou quando as variáveis de ambiente são muito longas para ter tudo em uma linha. Isso também significa que você pode usar $GREET Env var sintaxe, mesmo no Windows, o que geralmente exigiria que fosse %GREET% .
Se você preceder um sinal de dólar com um número ímpar de retrocesso, a instrução EXPRESSÃO não será substituída. Observe que isso significa que a barra após a fuga de cordas JSON ocorreu. "FOO=\$BAR" não será substituído. "FOO=\\$BAR" será substituído.
Por fim, se você quiser passar por uma string json (por exemplo, ao usar o carregador TS), pode fazer o seguinte:
{
"scripts" : {
"test" : " cross-env TS_NODE_COMPILER_OPTIONS={ \" module \" : \" commonjs \" } node some_file.test.ts "
}
} Preste atenção especial ao traseiro triplo (\) antes das citações duplas (") e à ausência de citações únicas (') . Ambas as condições devem ser atendidas para trabalhar no Windows e no Unix.
cross-env vs cross-env-shell O módulo cross-env expõe duas caixas: cross-env e cross-env-shell . O primeiro executa comandos usando cross-spawn , enquanto o segundo usa a opção shell do spawn do Node.
O principal gabinete de uso para cross-env-shell é quando você precisa de uma variável de ambiente para ser definida em um script inteiro de shell embutido, em vez de apenas um comando.
Por exemplo, se você deseja que a variável de ambiente se aplique a vários comandos em série, precisará embrulhá-los e usar cross-env-shell em vez de cross-env .
{
"scripts" : {
"greet" : " cross-env-shell GREETING=Hi NAME=Joe " echo $GREETING && echo $NAME " "
}
} A regra geral é: se você deseja passar para cross-env um comando um comando que contém caracteres de shell especiais que você deseja interpretar , use cross-env-shell . Caso contrário, siga em cross-env .
No Windows, você precisa usar cross-env-shell , se deseja lidar com eventos de sinal dentro do seu programa. Um caso comum é quando você deseja capturar um evento SIGINT invocado pressionando Ctrl + C na interface da linha de comando.
Observe que npm usa cmd por padrão e isso não suporta a substituição de comando; portanto, se você deseja aproveitar isso, precisará atualizar seu .npmrc para definir o script-shell como PowerShell. Saiba mais aqui.
Originalmente, criei isso para resolver um problema que estava tendo com meus scripts NPM em formação angular. Isso facilitou muito a contribuição para o projeto para os usuários do Windows.
env-cmd - lê variáveis de ambiente de um arquivo@naholyr/cross-env - cross-env com suporte para definir valores padrão Procurando contribuir? Procure o bom rótulo da primeira edição.
Por favor, arquive um problema para bugs, documentação ausente ou comportamento inesperado.
Veja bugs
Este projeto está no modo de manutenção e nenhuma nova solicitação de recurso será considerada.
Saber mais
Obrigado a essas pessoas (key emoji):
Kent C. Dodds ? | Ya Zhuang ? | James Harris | Compumike08 ? | Daniel Rodríguez Rivero ? | Jonas Keincholz ? | Hugo Wood ? |
Thiebaud Thomas ? | Daniel Rey López | Amila Welihinda ? | Paul Betts ? | Turner Hayes ? | Suhas Karanth | Sven |
D. Nicolás Lopez Zelaya | Johan Hernandez | Jordan Nielson ? | Jason Cooke | BIBO5088 | Eric Berry ? | Michaël de Boey |
Lauri Eskola | Devuxer | Daniel |
Este projeto segue a especificação de todos os contribuintes. Contribuições de qualquer tipo de boas -vindas!
Nota: Isso foi adicionado tarde ao projeto. Se você contribuiu para este projeto de alguma forma, faça uma solicitação de tração para se adicionar à lista seguindo as instruções no
CONTRIBUTING.md
Mit