Como usar npm-scripts para criar diretórios no ambiente windows

27-09-2017

Esse post nem é um post de verdade, mas sim uma dica rápida.
Meu objetivo é mostrar como é possível criar diretórios a partir do npm-scripts no ambiente Windows.

Por que este post foi escrito?

Na primeira versão do projeto construído para este curso eu utilizei o bower como gerenciador de dependência do lado do front-end. Contudo, após finalizar a gravação de todas as aulas, resolvi voltar alguns commits anteriores e criei uma nova branch para regravar algumas aulas, substituindo o bower pelo npm.

Para que as demais video-aulas continuassem a fazer sentido, criei um npm-script para copiar as dependências de node_modules para dentro de components. Fazendo isso, não precisaria regravar todas as aulas, pois a estrutura de pastas seria a mesma. Assim quem fosse assistir na sequência não se sentiria perdido.

No final, este foi o npm-script criado:

1
2
3
4
5
"scripts": {
"postinstall": "cp -r node_modules/bootstrap/dist src/components/bootstrap/ && cp -r node_modules/font-awesome/css src/components/font-awesome/ && cp -r node_modules/font-awesome/fonts src/components/font-awesome/",
"gulp": "gulp"
},
<

Tudo funcionou perfeitamente pois eu já tinha em meu projeto a estrutura de pastas criadas previamente e não me atentei ao detalhe de que, se essa estrutura de pasta não existisse, tudo falharia.

É só criar a estrutura de pasta usando mkdir -p

Pois é. Deveria funcionar. Mas não é assim que acontece no Windows.

Se voce digitar no seu terminal algo:

1
2
$ mkdir -p meu/caminho/que/nao/existe
<

Você verá que todo o path foi criado justamente por causa da flag -p.

Mas se você tentar fazer o mesmo no npm-script e rodar o comando, verá um erro.

E como resolver.

Para resolver essa questão utilizei um módulo do node chamado mkdirp. Este módulo permite criarmos diretórios se for necessário. Sua utilização é muito fácil. Primeiro, vamos instalar o módulo e registrá-lo como dependência em nosso package.json.

1
2
$ npm i mkdirp -D
<

Depois, basta eu acrescentar um script para criar os diretórios necessários antes de tentar copiar os arquivos da pasta node_modules, Assim:

1
2
"postinstall": "mkdirp src/components/bootstrap/ src/components/font-awesome/",
<

Segue o código inteiro para sua referência:

1
2
3
4
5
6
7
8
9
"scripts": {
"test": "echo \"Error: no test specified\" &amp;&amp; exit 1",
"start": "echo startando",
"prestart": "echo prestart",
"poststart": "echo post start",
"postinstall": "mkdirp src/components/bootstrap/ src/components/font-awesome/ &amp;&amp; cp -r node_modules/bootstrap/dist src/components/bootstrap/ &amp;&amp; cp -r node_modules/font-awesome/css src/components/font-awesome/ &amp;&amp; cp -r node_modules/font-awesome/fonts src/components/font-awesome/",
"gulp": "gulp"
}
<

Moleza, não!

Forte abraço e até a próxima


Comentários: