2017 © Pedro PelΓ‘ez
 

library composer-symlinker

Composer script to symlink assets.

image

ajgl/composer-symlinker

Composer script to symlink assets.

  • Monday, January 29, 2018
  • by ajgarlag
  • Repository
  • 1 Watchers
  • 8 Stars
  • 5,426 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 3 Forks
  • 2 Open issues
  • 5 Versions
  • 22 % Grown

The README.md

AjglComposerSymlinker

The AjglComposerSymlinker component provides a Composer plugin to symlink paths from packages installed with composer to a different location. It is intended for use with web assets., (*1)

Latest Stable Version Latest Unstable Version Total Downloads Montly Downloads Daily Downloads License, (*2)

This plugin allows you to install web assets to the vendor directory and symlink them to a directory exposed through an HTTP server, without the need to provide a special composer package type with a custom installer., (*3)

Suppose the following project layout where we want to install the twbs/bootstrap package:, (*4)

project/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ Controller.php
β”‚   β”œβ”€β”€ Model.php
β”‚   └── View.php
β”œβ”€β”€ vendor/
└── www/
    β”œβ”€β”€ assets/
    |   β”œβ”€β”€ css
    |   β”œβ”€β”€ fonts
    |   β”œβ”€β”€ images
    |   └── js
    β”œβ”€β”€ index.php
    └── .htaccess

Any web asset installed with composer will be stored inside the vendor directory, but we need them to be stored inside www/assets directory. In the Usage section, we will see how to achieve this., (*5)

There are some alternatives, but they usually require defining a custom package type in the required package definition., (*6)

Installation

To install the latest stable version of this component, open a console and execute the following command:, (*7)

$ composer require ajgl/composer-symlinker

Usage

1. Require the source package

Add the desired package to the require section of the composer.json file:, (*8)

{
    "require": {
        "twbs/bootstrap": "^3.3"
    }
}

Create the symlinks definition adding a ajgl-symlinks section inside the extra section of the composer.json file:, (*9)

{
    "extra": {
        "ajgl-symlinks": {
            "twbs/boostrap": {
                "dist/css": "web/assets/css/bootstrap",
                "dist/js": "web/assets/js/bootstrap",
                "dist/fonts/glyphicons-halflings-regular.eot": "web/assets/fonts/glyphicons-halflings-regular.eot",
                "dist/fonts/glyphicons-halflings-regular.svg": "web/assets/fonts/glyphicons-halflings-regular.svg",
                "dist/fonts/glyphicons-halflings-regular.ttf": "web/assets/fonts/glyphicons-halflings-regular.ttf",
                "dist/fonts/glyphicons-halflings-regular.woff": "web/assets/fonts/glyphicons-halflings-regular.woff",
                "dist/fonts/glyphicons-halflings-regular.woff2": "web/assets/fonts/glyphicons-halflings-regular.woff2"
            }
        }
    }
}

As you can see, you can link directories or files. On Windows platform, the links will be created using the junction feature of NTFS, so you can only link directories., (*10)

3. Execute composer

Once the composer.json file is complete:, (*11)

{
    "require": {
        "ajgl/composer-symlinker": "^0.3",
        "twbs/bootstrap": "^3.3"
    },
    "extra": {
        "ajgl-symlinks": {
            "twbs/bootstrap": {
                "dist/css": "web/assets/css/bootstrap",
                "dist/js": "web/assets/js/bootstrap",
                "dist/fonts/glyphicons-halflings-regular.eot": "web/assets/fonts/glyphicons-halflings-regular.eot",
                "dist/fonts/glyphicons-halflings-regular.svg": "web/assets/fonts/glyphicons-halflings-regular.svg",
                "dist/fonts/glyphicons-halflings-regular.ttf": "web/assets/fonts/glyphicons-halflings-regular.ttf",
                "dist/fonts/glyphicons-halflings-regular.woff": "web/assets/fonts/glyphicons-halflings-regular.woff",
                "dist/fonts/glyphicons-halflings-regular.woff2": "web/assets/fonts/glyphicons-halflings-regular.woff2"
            }
        }
    }
}

Open a console and execute the composer update or composer install command:, (*12)

$ composer update -v

You will see the following messages in the composer output:, (*13)

Creating symlinks
 Symlinking package "twbs/bootstrap"
  Symlinking "/home/aj/tmp/lala/vendor/twbs/bootstrap/dist/css" to "/home/aj/tmp/lala/web/assets/css/bootstrap": symlink created
  Symlinking "/home/aj/tmp/lala/vendor/twbs/bootstrap/dist/js" to "/home/aj/tmp/lala/web/assets/js/bootstrap": symlink created
  Symlinking "/home/aj/tmp/lala/vendor/twbs/bootstrap/dist/fonts/glyphicons-halflings-regular.eot" to "/home/aj/tmp/lala/web/assets/fonts/glyphicons-halflings-regular.eot": symlink created
  Symlinking "/home/aj/tmp/lala/vendor/twbs/bootstrap/dist/fonts/glyphicons-halflings-regular.svg" to "/home/aj/tmp/lala/web/assets/fonts/glyphicons-halflings-regular.svg": symlink created
  Symlinking "/home/aj/tmp/lala/vendor/twbs/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf" to "/home/aj/tmp/lala/web/assets/fonts/glyphicons-halflings-regular.ttf": symlink created
  Symlinking "/home/aj/tmp/lala/vendor/twbs/bootstrap/dist/fonts/glyphicons-halflings-regular.woff" to "/home/aj/tmp/lala/web/assets/fonts/glyphicons-halflings-regular.woff": symlink created
  Symlinking "/home/aj/tmp/lala/vendor/twbs/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2" to "/home/aj/tmp/lala/web/assets/fonts/glyphicons-halflings-regular.woff2": symlink created

4. Packages not available at packagist.org

If you want to install a package that is not available in the main composer repository, you can define a new package inside the repositories section of the composer.json file., (*14)

{
    "repositories": [
        {
            "type": "package",
            "package": {
                "name": "dojo/dojo",
                "version": "1.11.1",
                "dist": {
                    "type": "zip",
                    "url": "http://download.dojotoolkit.org/release-1.11.1/dojo-release-1.11.1.zip"
                },
                "type": "library"
            }
        }
    ]
}

Then, you can define the desired symlinks in the ajgl-symlinks section as usual:, (*15)

{
    "extra": {
        "ajgl-symlinks": {
            "dojo/dojo": {
                ".": "www/dojo"
            }
        }
    }
}

License

This component is under the MIT license. See the complete license in the LICENSE file., (*16)

Reporting an issue or a feature request

Issues and feature requests are tracked in the Github issue tracker., (*17)

Author Information

Developed with β™₯ by Antonio J. GarcΓ­a Lagar., (*18)

If you find this component useful, please add a β˜… in the GitHub repository page and/or the Packagist package page., (*19)

The Versions

29/01 2018

dev-master

9999999-dev https://github.com/ajgarlag/AjglComposerSymlinker

Composer script to symlink assets.

  Sources   Download

MIT

The Requires

 

The Development Requires

composer assets

29/01 2018

dev-ntfs-junction

dev-ntfs-junction https://github.com/ajgarlag/AjglComposerSymlinker

Composer script to symlink assets.

  Sources   Download

MIT

The Requires

 

The Development Requires

composer assets

27/11 2017

0.2.1

0.2.1.0 https://github.com/ajgarlag/AjglComposerSymlinker

Composer script to symlink assets.

  Sources   Download

MIT

The Requires

 

The Development Requires

composer assets

27/05 2016

0.2.0

0.2.0.0 https://github.com/ajgarlag/AjglComposerSymlinker

Composer script to symlink assets.

  Sources   Download

MIT

The Requires

  • composer-plugin-api ^1.0

 

The Development Requires

composer assets

04/03 2013

0.1.0

0.1.0.0 https://github.com/ajgarlag/AjglComposerSymlinker

Composer script to symlink assets.

  Sources   Download

MIT

The Requires

 

The Development Requires

composer assets