Note, here's a diff of commits availabe upstream
This project template should provide a kickstart for managing your site dependencies with Composer.
If you want to know how to use it as replacement for Drush Make visit the Documentation on drupal.org.
git clone --recursive [email protected]:generoi/<example-project>.git <example-project>
cd <example-project>
# Setup git hooks
./vendor/generoi/git-hooks/install.sh
# Install dependencies
bundle
composer install
# Setup the ENV variables (pre-configured for the VM)
cp .env.example .env
# Build the VM
vagrant up --provision
# To sync files from your computer to the virtual machine, run
vagrant rsync-auto
# Install theme dependencies
# If npm install fails, make sure you have the lastest node and npm installed
cd web/sites/themes/custom/example
npm install
bower install
-
Clone the repo -
git clone --recursive [email protected]:generoi/drupal-project.git foobar
-
Setup git hooks
./vendor/generoi/git-hooks/install.sh
-
Install dependencies
bundle; composer install
-
Rename everything (relies on your theme being named the same as the repository)
# Search and replace all references to the project find . -type f -print0 | xargs -0 sed -i 's/<example-project>/foobar/g' # You need to manually setup the remote environment hosts in: # - `config/environments.yml`
-
Prepare your own ENV variables (pre-configured for the VM)
cp .env.example .env
-
Configure the correct build tasks, application name, and repo path in
package.json
. -
Setup the new remote git repository
# Remove the existing master branch git branch -D master # Switch to a new master branch for this project git checkout -b master # Create a new repository on github open https://github.com/organizations/generoi/repositories/new # Set origin url to to the newly created github repository git remote set-url origin [email protected]:generoi/<example-project>.git # Push the code git push -u origin master
-
Setup the VM
# Change the VM IP to something unique vim config/local.config.yml # Build the VM vagrant up --provision # To sync files from your computer to the virtual machine, run vagrant rsync-auto
First you need to install composer.
Note: The instructions below refer to the global composer installation. You might need to replace
composer
withphp composer.phar
(or similar) for your setup.
After that you can create the project:
composer create-project drupal-composer/drupal-project:8.x-dev some-dir --stability dev --no-interaction
With composer require ...
you can download new dependencies to your
installation.
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.
When installing the given composer.json
some tasks are taken care of:
- Drupal will be installed in the
web
-directory. - Autoloader is implemented to use the generated composer autoloader in
vendor/autoload.php
, instead of the one provided by Drupal (web/vendor/autoload.php
). - Modules (packages of type
drupal-module
) will be placed inweb/modules/contrib/
- Theme (packages of type
drupal-theme
) will be placed inweb/themes/contrib/
- Profiles (packages of type
drupal-profile
) will be placed inweb/profiles/contrib/
- Creates default writable versions of
settings.php
andservices.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
.
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.
Follow the steps below to update your core files.
- 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
orrobots.txt
. - Commit everything all together in a single commit, so
web
will remain in sync with thecore
when checking out branches or runninggit 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.
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.
Composer recommends no. They provide argumentation against but also workrounds if a project decides to do it anyway.
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.
To add a patch to drupal module foobar insert the patches section in the extra section of composer.json:
"extra": {
"patches": {
"drupal/foobar": {
"Patch description": "URL to patch"
}
}
}