A utility to install front-end files with Composer
A utility to install front-end files with Composer, (*1)
By default Composer installs all package files under the vendor directory.
It is ok for Composer's main purpose: a tool for dependency management in PHP., (*2)
But often, PHP projects involve other languages, like those used in front-end (JavaScript, CSS and their derivatives)., (*3)
You could use different package managers to deal with each kind of file, but it would be too much work, and I think it is good to have a unified tool., (*4)
This is where this package comes in. You will use Composer to fetch repositories containing front-end assets, and this package will symlink them to their appropriate directory., (*5)
Run this inside your project:, (*6)
composer require aryelgois/composer-front-end
, (*7)
In order to avoid Composer warnings during a fresh install, keep the package entry at the beginning of composer.json
require
directive., (*8)
Add this to your composer.json:, (*9)
{ "scripts": { "post-package-install": "aryelgois\\Composer\\FrontEnd::postPackageInstall", "front-end-refresh": "aryelgois\\Composer\\FrontEnd::refresh" }, }
Now, whenever you install a new package with front-end files, they will be symlinked., (*10)
If you already installed some front-end packages, run
composer front-end-refresh
to look in every vendor package., (*11)
These JSON files are used to tell which files should be symlinked and where., (*12)
You could use any key you like for the file_group
, but it needs to be the same
in the vendor config and in your project., (*13)
Used in vendor packages., (*14)
It contains a map of 'file_group': ['file']
of files to be symlinked into your
project.
Paths are relative to the vendor package directory., (*15)
not
vendor/
, butvendor/some/package/
, (*16)
{ "css": "assets/superduperstyle.css", "js": [ "main.js", "src/myawesomescript.js" ] }
It is possible to specify a single file without an array., (*17)
Used in your project., (*18)
It can include the following keys:, (*19)
(required), (*20)
A map of 'file_group': 'directory'
to contain symlinks from other packages.
Paths are relative to the root directory., (*21)
(optional), (*22)
A map of 'package/name': files
to be symlinked. The content would be the same
as in frontend.json., (*23)
Useful when a vendor does not include the frontend.json., (*24)
It replaces the frontend.json, (*25)
(optional), (*26)
Defines how the symlinks are placed in the directory of each file_group:, (*27)
vendor/package/
, inside the specified
directories. It helps with files with same name.(optional), (*28)
Defines the default structure for all directories. If not specified, nest
is
used., (*29)
{ "directories": { "css": "public/css", "js": "public/js" }, "structure": { "css": "flat", } }
public/
is the Document Root, (*30)
You still need to manually add the markup to use the symlinked files in your webpage:, (*31)
, (*32)
Even with nest
, all symlinks are placed flattened, i.e., the file structure
in the vendor package is not preserved., (*33)