Setup a Gulp frontend development workflow (SASS/JavaScript/Pug)
Gulp is a toolkit for automating and enhancing development workflow. In this tutorial we’ll be setting up a frontend workflow to compile SASS, JavaScript, and Pug assets.
Let’s get started by installing the gulp command line utility:
npm install gulp-cli --global
Next create the project directory and run npm init
to generate a package.json
file:
mkdir gulp-project
cd gulp-project
npm init -y
Gulp can then be installed into our project with the following command:
npm install gulp --save-dev
Create a gulpfile and test the installation
In the root of the project directory create a new file called gulpfile.js
and add the following task:
function defaultTask(cb) {
console.log("Gulp is working!");
cb();
}
exports.default = defaultTask;
Test the installation by running the gulp
command. If successful you’ll see Gulp is working!
logged in the terminal. With gulp installed and working we can now begin setting up our workflow starting with the SASS.
SASS gulp task
Create a /src/css
folder with the following files:
style.scss
_vars.scss
_global.scss
style.scss
– imports the other “partial” scss files:
// style.scss
@import "_vars.scss";
@import "_global.scss";
_vars.scss
– defines SASS variables to use:
// _vars.scss
$font-color: #333;
$font-family: sans-serif;
$background-color: #eee;
_global.scss
– some styles for the body element using the variables:
// global.scss
body {
color: $font-color;
font-family: $font-family;
background-color: $background-color;
}
Next install the SASS gulp package with the following command:
npm install gulp-sass --save-dev
Then update gulpfile.js
to include the CSS task:
const { src, dest, watch } = require("gulp");
const sass = require("gulp-sass");
function css() {
return src("./src/css/\*.scss")
.pipe(sass().on("error", sass.logError))
.pipe(dest("./dist/assets/"));
}
exports.css = css;
We can now run the task using the gulp css
command. This will create a /dist/assets
folder with a single style.css
file that contains the compiled CSS:
body {
color: #333;
font-family: sans-serif;
background-color: #eee; }
JavaScript gulp task
Create a /js
folder inside the /src
folder with the following files:
main.js
plugin.js
For the JavaScript portion of this tutorial we’ll simply be concatenating multiple JavaScript files into a single file. To do this we need to install the gulp-concat
package:
npm install gulp-concat --save-dev
Then add the following task to the gulpfile.js
file:
const concat = require("gulp-concat");
function js() {
return src("./src/js/\*.js")
.pipe(concat("script.js"))
.pipe(dest("./dist/assets/"));
}
exports.js = js;
When we run the gulp js
command our JavaScript files will be combined into single file named script.js
that is located in the /assets
folder along with the compiled CSS.
Pug gulp task
Create a /pug
folder inside the /src
folder.
We’ll first create a layout.pug
file that loads our compiled CSS & JavaScript:
doctype html
html
head
block head
script(src='./assets/script.js')
link(rel='stylesheet', href='./assets/style.css')
body
#main
block content
Inside the /pug
folder create a /views
folder with a index.pug
file:
extends ../layout.pug
block head
title Hello World
block content
h1 Welcome
p This is the index.pug file compiled.
Next install the Pug package with the following command:
npm install gulp-pug --save-dev
Then add the following task to the gulpfile.js
file:
const pug = require("gulp-pug");
function html() {
return src("./src/pug/views/\*.pug")
.pipe(pug({pretty: true,}))
.pipe(dest("./dist"));
}
exports.html = html;
Run using the gulp html
command. This will compile the content of index.pug
into layout.pug
and generate a index.html
file that we can view in the browser.
Watch files for changes
Running each individual task every time a file is modified would be a pain which is why we’ll setup a “watch” task to automatically run tasks on file save. Add the following to the end of the gulpfile.js
file:
exports.watch = function () {
watch("./src/css/\*.scss", css);
watch("./src/pug/\*\*/\*.pug", html);
watch("./src/js/\*.js", js);
};
Now we only need to run the gulp watch
command once and anytime a file is modified the relevant gulp task will be executed. Gulp logs the task that was run in the terminal for reference.