Wallogit.com
2017 © Pedro PelĂĄez
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
requiredirective., (*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)