PHPackages                             greg-1-anderson/drupal-core-composer-scaffold - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. greg-1-anderson/drupal-core-composer-scaffold

ActiveComposer-plugin

greg-1-anderson/drupal-core-composer-scaffold
=============================================

A flexible Composer project scaffold builder.

8.9.x-dev(6y ago)041GPL-2.0-or-laterPHPPHP &gt;=7.0.8CI failing

Since Apr 17Pushed 6y ago1 watchersCompare

[ Source](https://github.com/greg-1-anderson/drupal-core-composer-scaffold)[ Packagist](https://packagist.org/packages/greg-1-anderson/drupal-core-composer-scaffold)[ Docs](https://www.drupal.org/project/drupal)[ RSS](/packages/greg-1-anderson-drupal-core-composer-scaffold/feed)WikiDiscussions 8.9.x Synced 2d ago

READMEChangelogDependencies (2)Versions (2)Used By (1)

Drupal Composer Scaffold
========================

[](#drupal-composer-scaffold)

This project provides a composer plugin for placing scaffold files (like `index.php`, `update.php`, …) from the `drupal/core` project into their desired location inside the web root. Only individual files may be scaffolded with this plugin.

The purpose of scaffolding files is to allow Drupal sites to be fully managed by Composer, and still allow individual asset files to be placed in arbitrary locations. The goal of doing this is to enable a properly configured composer template to produce a file layout that exactly matches the file layout of a Drupal 8.7.x and earlier tarball distribution. Other file layouts will also be possible; for example, a project layout very similar to the current [drupal-composer/drupal-project](https://github.com/drupal-composer/drupal-scaffold)template will also be provided. When one of these projects is used, the user should be able to use `composer require` and `composer update` on a Drupal site immediately after untarring the downloaded archive.

Note that the dependencies of a Drupal site are only able to scaffold files if explicitly granted that right in the top-level composer.json file. See [allowed packages](#allowed-packages), below.

Usage
-----

[](#usage)

Drupal Composer Scaffold is used by requiring `drupal/core-composer-scaffold` in your project, and providing configuration settings in the `extra` section of your project's composer.json file. Additional configuration from the composer.json file of your project's dependencies is also consulted in order to scaffold the files a project needs. Additional information may be added to the beginning or end of scaffold files, as is commonly done to `.htaccess` and `robots.txt`files. See [altering scaffold files](#altering-scaffold-files) for more information.

Typically, the scaffold operations run automatically as needed, e.g. after `composer install`, so it is usually not necessary to do anything different to scaffold a project once the configuration is set up in the project composer.json file, as described below. To scaffold files directly, run:

```
composer drupal:scaffold

```

### Allowed Packages

[](#allowed-packages)

Scaffold files are stored inside of projects that are required from the main project's composer.json file as usual. The scaffolding operation happens after `composer install`, and involves copying or symlinking the desired assets to their destination location. In order to prevent arbitrary dependencies from copying files via the scaffold mechanism, only those projects that are specifically permitted by the top-level project will be used to scaffold files.

Example: Permit scaffolding from the project `drupal/core`

```
  "name": "my/project",
  ...
  "extra": {
    "drupal-scaffold": {
      "allowed-packages": [
        "drupal/core"
      ],
      ...
    }
  }

```

Allowing a package to scaffold files also permits it to delegate permission to scaffold to any project that it requires itself. This allows a package to organize its scaffold assets as it sees fit. For example, the project `drupal/core` may choose to store its assets in a subproject `drupal/assets`.

It is possible for a project to obtain scaffold files from multiple projects. For example, a Drupal project using a distribution, and installing on a specific web hosting service provider might take its scaffold files from:

- Drupal core
- Its distribution
- A project provided by the hosting provider
- The project itself

Each project allowed to scaffold by the top-level project will be used in turn, with projects declared later in the `allowed-packages` list taking precedence over the projects named before. The top-level composer.json itself is always implicitly allowed to scaffold files, and its scaffold files have highest priority.

### Defining Project Locations

[](#defining-project-locations)

The top-level project in turn must define where the web root is located. It does so via the `locations` mapping, as shown below:

```
  "name": "my/project",
  ...
  "extra": {
    "drupal-scaffold": {
      "locations": {
        "web-root": "./docroot"
      },
      ...
    }
  }

```

This makes it possible to configure a project with different file layouts; for example, either the `drupal/drupal` file layout or the `drupal-composer/drupal-project` file layout could be used to set up a project.

If a web-root is not explicitly defined, then it will default to `./`.

### Altering Scaffold Files

[](#altering-scaffold-files)

Sometimes, a project might wish to use a scaffold file provided by a dependency, but alter it in some way. Two forms of alteration are supported: appending and patching.

The example below shows a project that appends additional entries onto the end of the `robots.txt` file provided by `drupal/core`:

```
  "name": "my/project",
  ...
  "extra": {
    "drupal-scaffold": {
      "file-mapping": {
        "[web-root]/robots.txt": {
          "append": "assets/my-robots-additions.txt",
        }
      }
    }
  }

```

It is also possible to prepend to a scaffold file instead of, or in addition to appending by including a "prepend" entry that provides the relative path to the file to prepend to the scaffold file.

The example below demonstrates the use of the `post-drupal-scaffold-cmd` hook to patch the `.htaccess` file using a patch.

```
  "name": "my/project",
  ...
  "scripts": {
    "post-drupal-scaffold-cmd": [
      "cd docroot && patch -p1
