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 |
"scripts": { |
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\" && exit 1",
"start": "echo startando",
"prestart": "echo prestart",
"poststart": "echo post start",
"postinstall": "mkdirp src/components/bootstrap/ src/components/font-awesome/ && 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"
}
<
Moleza, não!
Forte abraço e até a próxima