Para instruções gerais de instalação, por favor leia o guia [[[Getting Started]]. Se após a leitura desse guia, você precisar de informações mais específicas, leia o guia abrangente [[Installing grunt]].
Instalação tanto de versões publicadas e não publicadas do Grunt é coberta no guia [[Installing grunt]].
O Grunt funciona bem no Windows pois o Node.js e o npm também funcionam bem no Windows. Geralmente a parte problemática é o Cygwin já que ele vem com uma versão desatualizada do Node.js.
A melhor maneira de evitar esse problema é usar o Instalador msysGit para instalar os binários do git
e o Instalador do Node.js para instalar os binários do node
e do npm
, e usar o prompt de comando do Windows ou PowerShell embutidos em vez do Cygwin.
Provavelmente isto está acontencendo pois você esqueceu de chamar o método this.async que diz para o Grunt que sua tarefa é assíncrona. Para simplificar, o Grunt usa um estilo de codificação síncrono, que pode ser chaveado para o assíncrono chamando this.async()
dentro do corpo da tarefa.
Perceba que passar false
para a função done()
diz ao Grunt que a tarefa falhou.
Por exemplo:
grunt.registerTask('asyncme', 'My asynchronous task.', function() {
var done = this.async();
doSomethingAsync(done);
});
Para habilitar o auto-completar usando tab para grunt, adicione a seguinte linha no seu arquivo ~/.bashrc
:
eval "$(grunt --completion=bash)"
Isso presume que o Grunt foi instalado globalmente com npm install -g grunt
. Atualmente, o único shell suportado é o bash.
Enquanto cada tarefa pode aceitar seus próprios parâmetros, existem algumas poucas opções disponíveis para compartilhar parâmetros entre múltiplas tarefas.
Esse é o método sugerido para compartilhar parâmetros entre múltiplas tarefas.
Enquanto tarefas alias tasks são necessariamente simples, uma tarefa normal pode usar grunt.task.run para fazê-la efetivamente funcionar como uma tarefa de atalho "dynamic". Nesse exemplo, executar grunt build:001
na linha de comando resultaria na execução das tarefas foo:001
, bar:001
e baz:001
.
grunt.registerTask('build', 'Run all my build tasks.', function(n) {
if (n == null) {
grunt.warn('Build num must be specified, like build:001.');
}
grunt.task.run('foo:' + n, 'bar:' + n, 'baz:' + n);
});
Outro jeito de compartilhar parâmetros entre múltiplas tarefas é usar grunt.option. Nesse exemplo, executar grunt deploy --target=staging
na linha de comando faria grunt.option('target')
retornar "staging"
.
grunt.registerTask('upload', 'Upload code to specified target.', function(n) {
var target = grunt.option('target');
// fazer algo útil com target aqui
});
grunt.registerTask('deploy', ['validate', 'upload']);
Perceba que opções booleanas podem ser especificadas usando apenas a chave sem o valor. Por exemplo, executar grunt deploy --staging
na linha de comando faria grunt.option('staging')
retornar true
.
Em outros casos, você pode desejar expor uma configuração ou valores globais. Nesses casos, registre uma tarefa que configura seus argumentos como um valor global ou de configuração.
Nesse exemplo, executar grunt set_global:name:peter set_config:target:staging deploy
na linha de comando faria global.name
ser "peter"
e grunt.config('target')
retornar "staging"
.
Pode-se presumir que a tarefa deploy
irá retornar esses valores.
grunt.registerTask('set_global', 'Set a global variable.', function(name, val) {
global[name] = val;
});
grunt.registerTask('set_config', 'Set a config property.', function(name, val) {
grunt.config.set(name, val);
});
Se você está no mesmo diretório do [Gruntfile]([Getting Started), o Windows tenta executar esse arquivo quando você digita grunt. Portanto você precisa digitar grunt.cmd
no lugar.
Uma alternativa é usar o comando DOSKEY
para criar uma macro Grunt, seguindo essas instruções. Isso permitirá usar grunt
em vez de grunt.cmd
.
Esse é o comando DOSKEY
que você pode usar:
DOSKEY grunt=grunt.cmd $*