====== 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.