phpgt/build

Client-side build system for PHP projects.

v1.0.1 2020-01-16 09:20 UTC

README

This project provides a system for defining and running client-side build processes automatically, using tools already installed by your favourite client-side dependency manager.

Build status Code quality Code coverage Current version PHP.G/Build documentation

Example usage

An example build.json below shows three different usages:

  1. npm has been used to install babel into the node_modules directory. The command to run is the babel binary within the node_modules directory. The command will execute whenever a *.es6 file changes within the script directory.
  2. sass has been installed to the system. The sass command is available on the environment PATH, and the developer has stated that at least version 3.5 is required for the build. The command will execute whenever a *.scss file changes within the style directory.
  3. A custom PHP script is called whenever any HTML or PHP file is edited in the page directory. This assumes that the command vendor/bin/sitemap is installed via a composer package.

build.json:

{
	"script/**/*.es6": {
		"name": "Babel transpile",
		"command": "./node_modules/.bin/babel",
		"args": "script/main.js -o www/script.js",
		"require": {
			"node": "^8.4",
			"@command": "^6.0"
		}
	},
	
	"style/**/*.scss": {
		"name": "Sass compilation",
		"command": "sass",
		"args": "style/main.scss www/style.css",
		"require": {
			"@command": ">=3.5"
		}
	},
	
	"page/**/*.{html|php}": {
		"name": "Sitemap generation",
		"command": "php vendor/bin/sitemap",
		"args": "src/page www/sitemap.xml"
	}
}

Not a dependency manager

This library assumes the configuration of the system is already configured.

The primary objective is to provide a client-side build system that is automatically configured for PHP projects, leaving the configuration of the system down to the developer's choice of client-side dependency management software.

Features at a glance

  • One-off builds
  • Background builds (watching the matching files and re-building where necessary)
  • Bring your own client-side dependency manager