Sustainability Planning: Frameworks, Principles & Management Tools
Composer tools and frameworks for drupal.ppt
-
Upload
promet-source -
Category
Internet
-
view
238 -
download
0
Transcript of Composer tools and frameworks for drupal.ppt
![Page 1: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/1.jpg)
Pantheon.io / Prometsource.com
JULY 22-24, 2015NATIONAL INSTITUTES OF HEALTH CAMPUS
BETHESDA, MD
Composer Tools and Frameworks for Drupal
![Page 2: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/2.jpg)
Pantheon.io / Prometsource.com
Why you should care about composer
Today
➢ Dependency Management Hell
➢ Manually Include Classes at runtime
➢ Large unmanagable repository
➢ Composer manages dependencies
➢ Autoloader lazy-includes class files
➢ Repository remains clean and lean
With Composer
![Page 3: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/3.jpg)
Pantheon.io / Prometsource.com
Composer Tools and Frameworks for Drupal
+ =+COMPOSER DRUPAL DRUSH WIN
![Page 4: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/4.jpg)
Pantheon.io / Prometsource.com 4
Who Are We?
Greg AndersonDoug Dobrzynski
![Page 5: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/5.jpg)
Pantheon.io / Prometsource.com 5
Who Are We?
Allan Chappell
Senior Solutions Architect
![Page 6: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/6.jpg)
Pantheon.io / Prometsource.com 6
Agenda
‣What is Composer?
‣Installing Drupal 7 with Composer
•composer_vendor + custom-installer
•drupal-tangler
‣Managing Your Project
![Page 7: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/7.jpg)
Pantheon.io / Prometsource.com
WHAT IS COMPOSER?
PART ONE
![Page 8: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/8.jpg)
Pantheon.io / Prometsource.com 8
What Is Composer?
An Installer A Dependency Manager An Autoloader
{
"require": {
"php": ">=5.4.0",
"symfony/browser-kit": "~2.1",
"symfony/css-selector": "~2.1",
"symfony/dom-crawler": "~2.1",
"guzzlehttp/guzzle": ">=4,<6"
},
…
}
Evaluate and select <?php
$client = new GuzzleHttp\Client();
>=4,<6
guzzlehttp/guzzle
5.*
guzzlehttp/guzzle
v5.2.0
guzzlehttp/guzzle
"autoload": { "psr-4": { "GuzzleHttp\\": "src/" } },
composer.json
![Page 9: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/9.jpg)
Pantheon.io / Prometsource.com 9
Why Use Composer?
‣Standard
‣Easiest for developers
•Dependency resolution
•Code updates
•Autoloading of classes
‣Composer is being adopted everywhere
![Page 10: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/10.jpg)
Pantheon.io / Prometsource.com 10
What Projects Are Using Composer?
Not Using Composer
… and many others!
http/guzzle
fabpot/goutteDrupal Modules Drush Extensions
PHP APIs
symfony/yaml
twig/twig
Not Using ComposerUsing Composer
![Page 11: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/11.jpg)
Pantheon.io / Prometsource.com 11
Drupal 7 and Composer
Can we do this?
?+ =
![Page 12: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/12.jpg)
Pantheon.io / Prometsource.com 12
Composer Parts of the Whole
Composer
PHP
dependency
management
software.
Packagist
A software
repository
manager.
Custom Installer
An executable Composer
component. Optional.
autoload.php
A generated file
that must be
included
by your app.
composer.json
A structured file
that defines a
project.
![Page 13: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/13.jpg)
Pantheon.io / Prometsource.com 13
Repository Data for Drupal Projects
packagist.drupal-composer.org
A third-party repository containing data on projects from drupal.org.
![Page 14: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/14.jpg)
Pantheon.io / Prometsource.com 14
Semantic Versioning
Drupal Module Version
7.x-1.5DRUPAL-x.MODULE.MINOR
Versions are converted to semantic versioning before being published on packagist.drupal-composer.org.
7.1.5MAJOR.MINOR.PATCH
Composer Version
![Page 15: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/15.jpg)
Pantheon.io / Prometsource.com 15
Comparison with Drush Make
composer.json
Repository and custom installers
(previously explained)
Drupal module that provides an autoload
strategy (next).
Drush Make{ "name": "organization/project", "description": "Drupal composer.json file", "repositories": [ { "type": "composer", "url": "http://packagist.drupal-composer.org/" } ], "require": { "davidbarratt/custom-installer": "dev-master", "derhasi/composer-preserve-paths": "0.1.*", "drupal/drupal": "7.*", "drupal/composer_vendor": "7.1.*", "http/guzzle": "~5", "drupal/devel": "7.1.*", }, … }
; Drush make file that uses guzzle; APIapi = 2
; Corecore = 7.x
; Drupal project.projects[drupal][type] = coreprojects[drupal][version] = 7.xprojects[drupal][download][type] = gitprojects[drupal][download][branch] = 7.x
; Modulesprojects[] = composer_managerprojects[] = aws_glacierprojects[] = devel
![Page 16: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/16.jpg)
Pantheon.io / Prometsource.com 16
Autoloading in PHP
"autoload": {
"psr-4": {
"GuzzleHttp\\": "src/"
}
},
composer.json from guzzlehttp/guzzle
autoload_psr4.php generated by Composer via composer install
$vendorDir = dirname(dirname(__FILE__));
return array(
'GuzzleHttp\\' => array($vendorDir .
'/guzzlehttp/guzzle/src'),
);
Saves one line of code per class - but it’s a very important line!
RUN TIME INSTALL TIME
<?php
include "vendor/autoload.php";
$client = new GuzzleHTTP\Client();
php source file that calls GuzzleHTTP
$map = require __DIR__ . '/autoload_psr4.php';
foreach ($map as $namespace => $path) {
$loader->setPsr4($namespace, $path);
}
Composer autoloader registration called from vendor/autoload.php
include $vendorDir . '/guzzlehttp/guzzle/src/Client.php';
![Page 17: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/17.jpg)
Pantheon.io / Prometsource.com 17
Custom Installers for Composer + D7
generalredneck/drupal-libraries-installer-plugin
promet/drupal-tangler
derhasi/composer-preserve-paths
davidbarratt/custom-installer
OR
OPTIONALnetresearch/composer-patches-plugin
Allows composer.json files to specify where components get installed.
Allows nested installation of composer libraries (e.g. Drupal modules inside of
Drupal core).
Installs modules and themes to their standard location in the vendor directory, and symlinks
to them from sites/all/modules/contrib or copies them to sites/all/modules/contrib.
Allows composer.json files to specify where components get installed.
Allows patch files to be applied to Drupal core or contrib modules after Composer installs
them.
![Page 18: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/18.jpg)
Pantheon.io / Prometsource.com 18
Adding Composer Support
To make this work, we just need to include vendor/autoload.php
+ =
![Page 19: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/19.jpg)
Pantheon.io / Prometsource.com
INSTALLING DRUPAL 7 WITH COMPOSER
PART TWO
![Page 20: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/20.jpg)
Pantheon.io / Prometsource.com
Searches for composer.json files
in every module and dynamically merges them.
20
Composer Options for Drupal 7
composer_autoload composer_manager
Fragile Complex
Searches for autoload.php files in every module
directory and loads them individually.
![Page 21: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/21.jpg)
Pantheon.io / Prometsource.com
Writes a settings.php file that loads the correct autoload.php file.
Loads the sites/all/vendor/au
toload.php file.
21
Better Options for Drupal 7
composer_vendor promet/drupal-tangler
Wins! Wins!
![Page 22: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/22.jpg)
Pantheon.io / Prometsource.com 22
Directory Structure
mydrupalsite.org
composer.json
composer.lock
htdocs
sites
default
settings.php
files
all
modules
We create a new top-level directory for our project, because composer cannot manage dependencies inthe same directory as composer.json.
We will put our Drupal root directory in htdocs. Tangler defaults to www but allows the option to specify a different name.
With drupal-tangler
![Page 23: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/23.jpg)
Pantheon.io / Prometsource.com 23
Directory Structure
mydrupalsite.org vendor drupal views composer htdocs sites default vendor -> ../../../vendor all modules contrib views -> ../../../../../vendor/drupal/views
We put the vendor directory in root because that is the default location for the Composer installer. The directory is organized by vendor name.
Each contributed module directory is symlinked to the corresponding directory in vendor.
With drupal-tangler
![Page 24: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/24.jpg)
Pantheon.io / Prometsource.com 24
Directory Structure
mydrupalsite.org modules
custom feature_moduleshtdocs sites all modules custom -> ../../../../modules/custom
feature_modules -> ../../../../modules/feature_modules
We put custom modules in the custom directory in the modules directory in root.
The feature_modules directory is symlinked to the feature_modules directory in the modules directory in root.
With drupal-tangler
We will put our Drupal root directory in htdocs. Tangler defaults to www but allows the option to specify a different name.
The custom directory is symlinked to the custom directory in the modules directory in root.
![Page 25: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/25.jpg)
Pantheon.io / Prometsource.com 25
Directory Structure
mydrupalsite.org cnf
config.yml.dist config.yml htdocs sites default settings.php
We put default configuration for settings in config.yml.dist.
We put default configuration for settings in config.yml.dist.
The settings.php file is generated by settings_compile from config.yml. If config.yml does not exist, it is generated from config.yml.dist.
With drupal-tangler
![Page 26: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/26.jpg)
Pantheon.io / Prometsource.com 26
Use Installation Profiles
mydrupalsite.org vendor drupal panopoly htdocs profiles panopoly -> ../../vendor/drupal/panopoly
Composer downloads the profile to the drupal directory in the vendor directory.
The panopoly directory is symlinked to the panopoly directory in the vendor directory.
With drupal-tangler
![Page 27: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/27.jpg)
Pantheon.io / Prometsource.com 27
Directory Structure
mydrupalsite.org composer.json composer.lock htdocs sites default settings.php files all modules vendor
We create a new top-level directory for our project, because composer cannot manage dependencies inthe same directory as composer.json.
We will put our Drupal root directory in htdocs.
We put the vendor directory in sites/all/vendor because that is where the composer_vendor project expects to find it.
With composer_vendor
![Page 28: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/28.jpg)
Pantheon.io / Prometsource.com 28
Place the Vendor Directory
composer.json
{ "require": { … }, "config": { "vendor-dir": "htdocs/sites/all/vendor" }, … }
For composer_vendor with a custom-installer
![Page 29: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/29.jpg)
Pantheon.io / Prometsource.com 29
Place Modules and Themes
{ "require": { "davidbarratt/custom-installer": "dev-master", … }, "extra": { "custom-installer": { "drupal-module": "htdocs/sites/all/modules/contrib/{$name}/", "drupal-theme": "htdocs/sites/all/themes/contrib/{$name}/" }, }, … }
composer.json
For composer_vendor with a custom-installer
![Page 30: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/30.jpg)
Pantheon.io / Prometsource.com 30
Use Installation Profiles
{ "require": { "davidbarratt/custom-installer": "dev-master", "drupal/panopoly": "7.1.*", … }, "extra": { "custom-installer": { "drupal-profile": "htdocs/profiles/{$name}/" }, }, … }
composer_vendorcomposer.json
For composer_vendor with a custom-installer
![Page 31: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/31.jpg)
Pantheon.io / Prometsource.com 31
Downloading Modules
$ drush dl develProject devel (7.x-1.5) downloaded to sites/all/modules/contrib/devel.Project devel contains 3 modules: devel_generate, devel, devel_node_access.
$ composer require drupal/devel '7.*'./composer.json has been updatedLoading composer repositories with package informationUpdating dependencies (including require-dev)
Drush Composer
Drush will select the right module major version, but composer require must be told which version to use.
Composer require will update the composer.json file before installing the module.
![Page 32: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/32.jpg)
Pantheon.io / Prometsource.com 32
Install a Module from a Private Repository
{ "repositories": [ { "type": "vcs", "url": "https://github.com/your-org/your-module" } ], "require": { "your-org/your-module": "dev-master" }, … } https://knpuniversity.com/screencast/question-answer-day/create-composer-package
composer.json
For composer_vendor and drupal-tangler
![Page 33: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/33.jpg)
Pantheon.io / Prometsource.com 33
Add a Patch to a Module
{ "require": { "netresearch/composer-patches-plugin": "~1.0" }, "extra": { "patches": { "drupal/features": { "7.2.2":[ { "title": "Remove mtime from .info export (added by Drupal 7.33)", "url": "https://www.drupal.org/files/issues/2381739-features-mtime.patch" } ] } } }, … } http://cambrico.net/drupal/using-composer-to-build-your-drupal-7-projects
composer.json
For composer_vendor and drupal-tangler
![Page 34: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/34.jpg)
Pantheon.io / Prometsource.com 34
Use a Composer Library from a Module
1.Add a composer.json and require the library
2.There is no step two!
VERY IMPORTANT - Never try to include an autoload.php file from a plug-in; always leave autoloader management to the application.
![Page 35: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/35.jpg)
Pantheon.io / Prometsource.com 35
Use Composer from a Drush Command
1.Add a composer.json and require the library
2.Call drush_autoload(__FILE__) from your hook_drush_init().
3.Require your Drush command in the composer.json of the Drupal site it is used in.
![Page 36: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/36.jpg)
Pantheon.io / Prometsource.com
Tangler works the same
36
Updating a Site
$ drush pm-update $ composer update$ drush updatedb
Composer
Remember - regardless of how you update your site, always do it on a copy first. Never update directly on the production site!
Drush
![Page 37: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/37.jpg)
Pantheon.io / Prometsource.com
MANAGING YOUR PROJECT
PART THREE
![Page 38: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/38.jpg)
Pantheon.io / Prometsource.com 38
Manage Project Code
mydrupalsite.org .git composer.json composer.lock .gitignore cnf
config.yml.dist config.yml
modules htdocs sites all modules contrib vendor
Commit composer.json. and composer.lock to the repository. composer.lock only changes when you run composer update.
If you have custom modules, you can commit them in the modules directory.
Avoid committing the htdocs directory, which is managed by drupal-tangler
With drupal-tangler
Commit config.yml.dist.Avoid committing config.yml.
![Page 39: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/39.jpg)
Pantheon.io / Prometsource.com 39
Manage Project Code
mydrupalsite.org .git composer.json composer.lock .gitignore
htdocs
sites
all
modules
custom
contrib
vendor
Commit composer.json. and composer.lock to the repository. composer.lock only changes when you run composer update.
If you have custom modules, you can commit them in the custom directory..
Avoid committing composer-managed directories, such as sites/all/modules/contrib and sites/all/vendor.
With composer_vendor
![Page 40: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/40.jpg)
Pantheon.io / Prometsource.com 40
Deploy Code Using ComposerLocal and Remote Dev Environments
install
clone
clone
1
2
3 4
install
![Page 41: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/41.jpg)
Pantheon.io / Prometsource.com 41
Deploy Code Using RsyncCopy code from dev to stage or live
rsyncinstallclone
1 2 3
![Page 42: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/42.jpg)
Pantheon.io / Prometsource.com 42
Deploy Code Using Two RepositoriesIsolate the Provider’s Repository
clone
installclone
commit
rsync
pullDeploy with git while maintaining a lean working repository by writing a short deploy script.
2 3
4
1
5
6
![Page 43: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/43.jpg)
Pantheon.io / Prometsource.com 43
Converting an Existing Site
$ drush dl composer_generate$ drush @site composer-generate > composer.json$ composer install# Set up settings.php, copy files… $ drush site-install
![Page 44: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/44.jpg)
Pantheon.io / Prometsource.com 44
Creating a New Sitedrupal-composer/drupal-project
$ composer create-project drupal-composer/drupal-project:7.x-dev dir --stability dev --no-interaction# Set up settings.php, copy files… $ drush site-install
![Page 45: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/45.jpg)
Pantheon.io / Prometsource.com 45
Creating a New Sitepromet/drupal7-framework
$ composer create-project promet/drupal7-framework project_name$ vagrant up --provision
![Page 46: Composer tools and frameworks for drupal.ppt](https://reader036.fdocuments.us/reader036/viewer/2022062522/58ae3ac21a28abad338b4567/html5/thumbnails/46.jpg)
Pantheon.io / Prometsource.com 46
Where Do We Go From Here?
https://groups.drupal.org/composer
http://drupal-composer.org/
https://github.com/drupal-composer
https://getcomposer.org/
@greg_1_anderson
@dsdobrzynski
@general_redneck