stadlabs-1



stadlabs-1

0 0


stadlabs-1

Stadlabs #1 : Composer / Bower

On Github faboo03 / stadlabs-1

Gestionnaire de dépendances

Composer / Bower

About Me

PHP Web developper at Stadline

Pourquoi un gestionnaire de dépendances ?

A la mano

Pour

  • On a toujours fait comme ça
  • On fige un état

Contre

  • Mises à jour compliquées
  • Pas de gestion de dépendences multiples
  • Projet très lourd à héberger et déployer

Dépots de code

SVN:Externals

Submodules GIT

Archive PHAR

Simple mais rigide

  • Simple comme un zip
  • Lourd même zippé
  • Peu de disponibilités

PEAR

Vieillissant mais éprouvé

Projet qui a bientôt 10 ans mais de nombreux projets abandonnés

Adoption très faible

Peut être simplement arrivé trop tôt

Composer / Packagist

Récent et Actif

Premier commit Avril 2011, plus de 2000 commits sur le repos public

Peu utile sans Packagist et sa communauté

Installation hyper simple

$ curl -sS https://getcomposer.org/installer | php

Les commandes de bases

$ php composer.phar update
$ php composer.phar install
$ php composer.phar require vendor/package:2.* 
$ php composer.phar search monolog 

composer.json et composer.lock

{
    "name": "Trnkt generator",
    "type": "project",
    "description": "Generator for the wunderful Tournikoti tool",
    "autoload": {
        "psr-0": { "": "src/" }
    },
    "require": {
        "php": ">=5.3.3",
        "symfony/symfony": "2.3.*",
        ...
    },
    "require-dev": {
        "liip/functional-test-bundle": "1.0.*@dev"
    },
    "scripts": {
        "post-install-cmd": [
            "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
            ...
        ]
    }
}
    

Behind the scene

Composer se charge de tout :

  • Mise à jour des dépendances
  • Autoload
  • Downloader

Description du packet

{
    "name": "Trnkt generator",
    "type": "project",
    "description": "Generator for the wunderful Tournikoti tool",
}
    

Dependance

{
    "require": {
        "php": ">=5.3.3",
        "symfony/symfony": "2.3.*",
        ...
    },
    "require-dev": {
        "liip/functional-test-bundle": "1.0.*@dev"
    }
}
    

Autoload

{
    "autoload": {
        "psr-0": {
            "Monolog\\": "src/",
            "Vendor\\Namespace\\": "src/",
            "Vendor_Namespace_": "src/"
        },
        "files": ["src/MyLibrary/functions.php"]
    }
}
    

Scripts

{
    "scripts": {
        "post-install-cmd": [
            "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
            ...
        ],
        "post-update-cmd": [
            "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
            ...
        ]
    }
}
    

Package

{
   "repositories": [
        {
            "type": "composer",
            "url": "http://packages.example.com"
        },
        {
            "type": "composer",
            "url": "https://packages.example.com",
            "options": {
                "ssl": {
                    "verify_peer": "true"
                }
            }
        },
        {
	        /* For all kind of repos*/
            "type": "vcs",
            "url": "https://github.com/Seldaek/monolog"
        },
        {
            "type": "pear",
            "url": "http://pear2.php.net"
        },
        {
            "type": "package",
            "package": {
                "name": "smarty/smarty",
                "version": "3.1.7",
                "dist": {
                    "url": "http://www.smarty.net/files/Smarty-3.1.7.zip",
                    "type": "zip"
                },
                "source": {
                    "url": "http://smarty-php.googlecode.com/svn/",
                    "type": "svn",
                    "reference": "tags/Smarty_3_1_7/distribution/"
                }
            }
        }
    ]
}
    

Plus loin que PHP

Bower

Pourquoi ?

Pour les même raisons que Composer et même plus encore !

Bower install

$ npm install bower

Bower commandes de bases

$ bower search jquery
$ bower install jquery#1.8.2 --save
$ bower update jquery 

bower.json

Comme pour composer

{
  "name": "my-weather-app",
  "dependencies": {
    "requirejs": "~2.1.5",
    "jquery": ">= 1.8.0",
    "weather": "~0.2.3"
  }
}

behind the scene Bower

  • NodeJs
  • S'inscrit dans un écoystème
  • dossier bower_component
  • Actions avec grunt : uglify, minify...

Merci !

Des questions ?