Composer template for Drupal projects
This project template should provide a kickstart for managing your site
dependencies with Composer., (*1)
If you want to know how to use it as replacement for
Drush Make visit
the Documentation on drupal.org., (*2)
Usage
First you need to install composer., (*3)
Note: The instructions below refer to the global composer installation.
You might need to replace composer with php composer.phar (or similar)
for your setup., (*4)
After that you can create the project:, (*5)
composer create-project zeeagency/drupal-project:8.x-dev some-dir --stability dev --no-interaction
With composer require ... you can download new dependencies to your
installation., (*6)
cd some-dir
composer require drupal/devel:8.*
The composer create-project command passes ownership of all files to the
project that is created. You should create a new git repository, and commit
all files not excluded by the .gitignore file., (*7)
What does the template do?
When installing the given composer.json some tasks are taken care of:, (*8)
- Drupal will be installed in the
public-directory.
- Autoloader is implemented to use the generated composer autoloader in
vendor/autoload.php,
instead of the one provided by Drupal (public/vendor/autoload.php).
- Modules (packages of type
drupal-module) will be placed in public/modules/contrib/
- Theme (packages of type
drupal-theme) will be placed in public/themes/contrib/
- Profiles (packages of type
drupal-profile) will be placed in public/profiles/contrib/
- Creates default writable versions of
settings.php and services.yml.
- Creates
sites/default/files-directory.
- Latest version of drush is installed locally for use at
vendor/bin/drush.
- Latest version of DrupalConsole is installed locally for use at
vendor/bin/drupal.
Updating Drupal Core
This project will attempt to keep all of your Drupal Core files up-to-date; the
project drupal-composer/drupal-scaffold
is used to ensure that your scaffold files are updated every time drupal/core is
updated. If you customize any of the "scaffolding" files (commonly .htaccess),
you may need to merge conflicts if any of your modfied files are updated in a
new release of Drupal core., (*9)
Follow the steps below to update your core files., (*10)
- Run
composer update drupal/core.
- Run
git diff to determine if any of the scaffolding files have changed.
Review the files for any changes and restore any customizations to
.htaccess or robots.txt.
- Commit everything all together in a single commit, so
public will remain in
sync with the core when checking out branches or running git bisect.
- In the event that there are non-trivial conflicts in step 2, you may wish
to perform these steps on a branch, and use
git merge to combine the
updated core files with your customized files. This facilitates the use
of a three-way merge tool such as kdiff3. This setup is not necessary if your changes are simple;
keeping all of your modifications at the beginning or end of the file is a
good strategy to keep merges easy.
Generate composer.json from existing project
With using the "Composer Generate" drush extension
you can now generate a basic composer.json file from an existing project. Note
that the generated composer.json might differ from this project's file., (*11)
FAQ
Should I commit the contrib modules I download
Composer recommends no. They provide argumentation against but also
workrounds if a project decides to do it anyway., (*12)
How can I apply patches to downloaded modules?
If you need to apply patches (depending on the project being modified, a pull
request is often a better solution), you can do so with the
composer-patches plugin., (*13)
To add a patch to drupal module foobar insert the patches section in the extra
section of composer.json:, (*14)
"extra": {
"patches": {
"drupal/foobar": {
"Patch description": "URL to patch"
}
}
}