Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/alexgrozav/gulp-setup
The perfect gulp setup. Get fast and hassle-free front-end automation.
https://github.com/alexgrozav/gulp-setup
browserify build clean coffeescript configurable css fonts gulp html images javascript modular plugin sass setup stylus typescript webpack
Last synced: 3 months ago
JSON representation
The perfect gulp setup. Get fast and hassle-free front-end automation.
- Host: GitHub
- URL: https://github.com/alexgrozav/gulp-setup
- Owner: alexgrozav
- License: other
- Created: 2017-02-19T18:34:14.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2017-10-16T10:43:41.000Z (over 7 years ago)
- Last Synced: 2024-08-11T10:50:43.871Z (5 months ago)
- Topics: browserify, build, clean, coffeescript, configurable, css, fonts, gulp, html, images, javascript, modular, plugin, sass, setup, stylus, typescript, webpack
- Language: JavaScript
- Homepage:
- Size: 15.5 MB
- Stars: 12
- Watchers: 3
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# The perfect gulp setup
This project aims to create a modular and configurable gulp setup. Get project automation up and running with minimum involvement. Gulp-setup is written and maintained by [@alexgrozav](https://twitter.com/alexgrozav).```
npm install gulp-cli -g
npm install gulp gulp-load-plugins gulp-setup --save-dev
```## Sample `gulpfile.js`
Setting up gulp using gulp-setup is simpler than ever.
```js
const packages = require('gulp-setup/package.json');
const gulp = require('gulp');
const $ = require('gulp-load-plugins')({ config: packages });
const setup = require('gulp-setup')($, gulp);
```## Default Tasks
By default, gulp-setup comes bundled with a variety of pre-made tasks.
```
gulp
gulp build
gulp clean
gulp watch
gulp lint
gulp html
gulp html-lint
gulp css
gulp css-lint
gulp sass
gulp sass-lint
gulp stylus
gulp stylus-lint
gulp javascript
gulp javascript-lint
gulp coffeescript
gulp coffeescript-lint
gulp typescript
gulp typescript-lint
gulp fonts
gulp images
gulp browser-sync
```__gulp__
The `default` task will run a sequence of `build`, `browser-sync`, and `watch`, as you would usually do in gulp.
__gulp build__
By default, the build task will execute the `clean` task, after which it runs all the other tasks that provide a `pattern` parameter.
__gulp clean__
This task will remove the existing build and dist folders.
__gulp watch__
The `watch` task will watch for changes and rebuild any task that provides a `pattern` parameter. In addition to this, `gulp-setup` creates a `partials graph`, which will rebuild any file that depends on the one that got changed.
__gulp lint__
This task will run any task that ends with `-lint`.
__gulp html__
Copies `.html` files to the build folder, then minifies them and outputs them in dist.
__gulp css__
Autoprefixes `.css` files and outputs them to the build folder, then minifies them and outputs them in dist.
__gulp sass__
Compiles and autoprefixes `.sass` and `.scss` files and outputs them to the build folder, then minifies them and outputs them in dist.
This task makes use of the `partials graph`, meaning that any changes on a partial will trigger a rebuild on the parent files.
__gulp stylus__
Compiles and autoprefixes `.styl` files and outputs them to the build folder, then minifies them and outputs them in dist. Stylus instance also provides `rucksack-css` functionality.
This task makes use of the `partials graph`, meaning that any changes on a partial will trigger a rebuild on the parent files.
__gulp javascript__
Compiles ES6 `.js` files and outputs them to the build folder, then minifies them and outputs them in dist. The `javascript` task can use either `webpack` or `browserify` to process and bundle the files, specified using the `options.bundler` parameter (as seen in the configuration example below).
This task makes use of the `partials graph`, meaning that any changes on a partial will trigger a rebuild on the parent files.
__gulp coffeescript__
Compiles `.coffee` files and outputs them to the build folder, then minifies them and outputs them in dist. Just like in the `javascript` task, you can use either `webpack` or `browserify` to bundle the files.
This task makes use of the `partials graph`, meaning that any changes on a partial will trigger a rebuild on the parent files.
__gulp typescript__
Compiles `.ts` files and outputs them to the build folder, then minifies them and outputs them in dist. Just like in the `javascript` task, you can use either `webpack` or `browserify` to bundle the files.
This task makes use of the `partials graph`, meaning that any changes on a partial will trigger a rebuild on the parent files.
__gulp images__
Optimizes `.svg`, `.jpg`, `.png`, and `.gif` files and outputs them to the build and dist folders.
__gulp fonts__
Copies `.eot`, `.svg`, `.ttf`, `.woff`, and `.woff2` files to the build and dist folders.
## Configuration
Here's a sample configuration for gulp-setup that sets the options for the existing default `javascript` task, and creates a new gulp task called `javascript-ext` by extending the base `javascript` one. You can override any of the default task parameters when extending a task.The `tasks` object key defines the name of the gulp task.
```js
const packages = require('gulp-setup/package.json');
const gulp = require('gulp');
const $ = require('gulp-load-plugins')({ config: packages });
const setup = require('gulp-setup')($, gulp, {
paths: {
src: 'path/to/src',
build: 'path/to/build',
dist: 'path/to/dist'
},
cache: true,
debug: true,
tasks: {
'javascript': {
options: {
bundler: 'webpack'
}
},
'javascript-ext': {
extends: 'javascript',
paths: {
src: 'path/to/custom-src'
}
}
}
});
```## Writing a task
The tasks present in gulp-setup are made out of two components: `process` and `base`. All other parameters, such as `pattern`, are made available in these components.```js
const setup = require('gulp-setup')($, gulp, {
tasks: {
'mytask': {
base: './bases/base',
process: './tasks/mytask',
pattern: '**/*.css',
paths: {
src: 'path/to/custom-src',
build: 'path/to/custom-build',
dist: 'path/to/custom-dist'
}
}
}
});
```### __Base__ tasks
The `base` task serves as a template for other tasks. It makes four pipeline hooks available: `init`, `build`, dist and `end` for integrating a process into it. If the `base` task is missing, then the `process` is considered as a standalone task and won't use a template.```js
// bases/base.jsmodule.exports = ($, gulp, config, task) => () =>
gulp.src($.path.join(config.task.src || config.paths.src, task.pattern))
.pipe(task.process.init()) // Initialization hook
.pipe($.debug())
.pipe(task.process.build()) // Building hook
.pipe(gulp.dest(config.task.build || config.paths.build))
.pipe(task.process.dist()) // Distribution hook
.pipe(gulp.dest(config.task.dist || config.paths.dist))
.pipe(task.process.end()); // Ending hook
```The gulp-setup package provides you with the following premade bases: `gulp-setup/bases/base`, `gulp-setup/bases/compile` and `gulp-setup/bases/lint`. You can use these bases for your custom process tasks.
### __Process__ tasks
The process task is the main processing that the task is concerned with. Process tasks normally use a __template__, a `base` task that they integrate with by providing `init`, `build`, `dist` or `end` hooks. Alternatively, you can write the process as a __standalone__ gulp task.__Template__
```js
// tasks/mytask.jsmodule.exports = ($, gulp, config, task) => ({
build: $.lazypipe()
.pipe($.autoprefixer),
dist: $.lazypipe()
.pipe($.cssmin)
});
```__Standalone__
```js
// tasks/myclean.jsmodule.exports = ($, gulp, config, task) => {
return () => gulp.src([config.paths.build, config.paths.dist])
.pipe($.clean());
}
```## Contributions, bugs and feature requests
Have a bug or a feature request? Please first read the [issue guidelines](https://github.com/alexgrozav/gulp-setup/blob/master/CONTRIBUTING.md) and search for existing and closed issues. If your problem or idea is not addressed yet, [please open a new issue](https://github.com/alexgrozav/gulp-setup/issues/new).