Lots of new stuff happening in the 2.0 branch
Use Rails? Check out http://viget.com/extend/gulp-rails-asset-pipeline and https://github.com/vigetlabs/gulp-rails-pipeline
Starter Gulp + Browserify project with examples of how to accomplish some common tasks and workflows. Read the blog post for more context, and check out the Wiki for some good background knowledge.
Includes the following tools, tasks, and workflows:
- Browserify (with browserify-shim)
- Watchify (caching version of browserify for super fast rebuilds)
- SASS (super fast libsass with source maps, and autoprefixer)
- CoffeeScript (with source maps!)
- BrowserSync for live reloading and a static server
- Image optimization
- Error handling in the console and in Notification Center
- Shimming non common-js vendor code with other dependencies (like a jQuery plugin)
- New Multiple bundles with shared dependencies
- New Separate compression task for production builds
- New Icon Font generation
If you've never used Node or npm before, you'll need to install Node. If you use homebrew, do:
brew install node
Otherwise, you can download and install from here.
npm install
This runs through all dependencies listed in package.json
and downloads them to a node_modules
folder in your project directory.
To run the version of gulp installed local to the project, in the root of your this project, you'd run
./node_modules/.bin/gulp
WAT. Why can't I just run gulp
? Well, you could install gulp globally with npm install -g gulp
, which will add the gulp script to your global bin folder, but it's always better to use the version that's specified in your project's package.json. My solution to this is to simply alias ./node_modules/.bin/gulp
to gulp
. Open up ~/.zshrc
or ~./bashrc
and add the following line:
alias gulp='node_modules/.bin/gulp'
Now, running gulp
in the project directory will use the version specified and installed from the package.json
file.
The first time you run the app, you'll also need to generate the iconFont, since this is not something we want to run every time with our default
task.
gulp iconFont
After that, just run the default
gulp task with:
gulp
This will run the default
gulp task defined in gulp/tasks/default.js
, which has the following task dependencies: ['sass', 'images', 'markup', 'watch']
- The
sass
task compiles your css files. images
moves images copies images from a source folder, performs optimizations, the outputs them into the build foldermarkup
doesn't do anything but copy an html file over from src to build, but here is where you could do additional templating work.watch
haswatchify
as a dependency, which will run the browserifyTask with adevMode
flag that enables sourcemaps and watchify, a browserify add-on that enables caching for super fast recompiling. The task itself starts watching source files and will re-run the appropriate tasks when those files change.
All paths and plugin settings have been abstracted into a centralized config object in gulp/config.js
. Adapt the paths and settings to the structure and needs of your project.
gulp iconFont
Generating and re-generating icon fonts is an every once and a while task, so it's not included in tasks/default.js
. Run the task separately any time you add an svg to your icons folder. This task has a couple of parts.
The task calls gulp-iconfont
and passes the options we've configured in gulp/config.js
. Then it listens for a codepoints
that triggers the generation of the sass file you'll be importing into your stylesheets. gulp/iconFont/generateIconSass
passes the icon data to a template, then outputs the resulting file to your sass directory. See the gulp-iconFont docs for more config details. You may reconfigure the template to output whatever you'd like. The way it's currently set up will make icons usable as both class names and mixins.
.twitter-button
+icon--twitter // (@include in .scss syntax)
or
<span class="icon -twitter"></span>
There is also a production
task you can run:
gulp production
This will run JavaScript tests, then re-build optimized, compressed css and js files to the build folder, as well as output their file sizes to the console. It's a shortcut for running the following tasks: karma
, images
, iconFont
minifyCss
, uglifyJs
.
This repo includes a basic js testing setup with the following: Karma, Mocha, Chai, and Sinon. There is karma
gulp task, which the production
task uses to run the tests before compiling. If any tests fail, the production
task will abort.
To run the tests and start monitoring files:
./node_modules/karma/bin/karma start
Want to just run karma start
? Either add alias karma="./node_modules/karma/bin/karma"
to your shell config or install the karma command line interface globally with npm install -g karma-cli
.
--
Social icons courtesy of icomoon.io
Made with ♥ at Viget!