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