Tabela de conteúdos
Gerenciamento de dependências JS no PHP com composer
O Composer
O composer é a ferramenta padrão de gerenciamento de dependências no php. Se você ainda não usa composer considere adotá-lo no seu próximo projeto. Ele permite baixar e atualizar pacotes de bibliotecas php e provê o autoload das classes dos pacotes e de suas classes.
Os pacotes baixados são colocados na pasta vendor/
fora do caminho do servidor web (apache) de forma a não ficar disponível diretamente para os navegadores. Dessa forma uma estrutura de pasta comumente utilizada para um projeto php seria:
projeto/ src/ vendor/ www/ index.php config.php
Nessa estrutura a pasta src/
possui as classes do seu projeto, a pasta www/
é a pasta publicada pelo servidor e a pasta vendor/
possui as dependências instaladas pelo composer.
Num repositório git, a pasta vendor/
é colocada no .gitignore
para que não seja adicionada ao repositório.
Dependências JS e HTML
Quando precisamos incorporar o bootstrap, por exemplo, até existe o pacote no composer mas recorremos ao bower ou npn pois são dependências relacionadas a javascript e html e não ao php. Dessa forma é necessário ter outro gerenciador de pacotes para instalar os chamados assets, que ficarão em uma pasta dentro de www/
pois deve ficar acessível publicamente. A árvore de pastas ficaria assim:
projeto/ src/ vendor/ www/ assets/ <----- index.php config.php
Uma solução com composer
Descobri recentemente o site https://asset-packagist.org/ que procura pacotes npn e bower e transforma em pacotes compativeis com composer. Para isso basta configurar esse site como source de pacotes no arquivo composer.json
.
Isso já ajuda imensamente permitindo utilizar somente o composer para gerenciar todas as dependências do projeto. Dessa forma o bootstrap pode ser instalado com o comando
composer require npn-asset/bootstrap
ou se preferir
composer require bower-asset/bootstrap
Resta ainda o problema do composer colocar os pacotes na pasta vendor/
não pública. A solução está no pacote oomphinc/composer-installers-extender
que permite instalar pacotes em pastas diferentes.
Abaixo segue um exemplo de configuração do composer.json
instalando as bibliotecas do bootstrap
e jquery
na pasta www/assets/
. Lembrando que se estiver usando git essa pasta também deverá ir para o .gitignore
.
"require": { "oomphinc/composer-installers-extender": "^1.1", "bower-asset/bootstrap": "^3.3", "npm-asset/jquery": "^2.2" }, "extra": { "installer-types": ["bower-asset", "npm-asset"], "installer-paths": { "www/assets/{$name}/": ["type:bower-asset", "type:npm-asset"] } }, "repositories": [ { "type": "composer", "url": "https://asset-packagist.org" } ]
Espero que seja útil. Qualquer dúvida estou à disposição pelo email kawabata em usp.br.