gulp snippets

How to fix Gulp.js "Error: path must be a string"

Tagged gulp, babelify, browserify, javascript  Languages javascript


    entries: [ './app/index.js' ],
    extensions: [ '.js', '.jsx' ],
    debug: true // Add sourcemaps
  .transform(babelify()) // JSX and ES6 => JS

A close-up of the issue:

.transform(babelify()) // JSX and ES6 => JS

The solution:

.transform(babelify) // JSX and ES6 => JS

Gulpfile.js example with Slim, Coffeescript, Sass, Browser Sync, Lint

Tagged gulp, slim  Languages coffeescript

A Gulpfile.js example with Slim, Coffeescript, Sass, Browser Sync, Lint. The script is suitable for building e.g. static websites and prototyping mobile apps.

Gulpfile expects your project to be structured in the following way (configurable): - src/css/*.scss,*.css - src/js/*.coffee,*.js - src/*.slim

Output is written to "www" folder.

# Gulpfile with:
# - Slim
# - Sass
# - Lint
# - Browsersync
# - CSS and HTML compression
# Install dependencies:
#   $ npm install gulp gulp-concat gulp-uglify event-stream gulp-coffee gulp-sass gulp-cssmin gulp-coffee gulp-coffeelint browser-sync gulp-util gulp-shell
# Then start developing:
#   $ gulp

gulp        = require 'gulp'
concat      = require 'gulp-concat'
es          = require('event-stream')
sass        = require 'gulp-sass'
uglify      = require 'gulp-uglify'
streamqueue = require 'streamqueue' # Preserves file order (vendor...)
coffee      = require 'gulp-coffee'
gutil       = require 'gulp-util'
shell       = require 'gulp-shell'
cssmin      = require 'gulp-cssmin'
coffeelint  = require 'gulp-coffeelint'
browserSync = require 'browser-sync'

isProd = gutil.env.type is 'prod'

sources =
  sass: 'src/css/**/*.scss'
  css: 'src/css/**/*.css'
  html: 'src/**/*.slim'
  js: 'src/js/**/*.js'
  coffee: 'src/js/**/*.coffee'

targets =
  css: 'www/css'
  html: 'www/'
  js: 'www/js'

# Check for errors
gulp.task 'lint', ->

# Compile Coffeescript
gulp.task 'js', ->
  stream = streamqueue(objectMode: true)
  # Vendor files
  # App files use Coffee
    .pipe(if isProd then uglify() else gutil.noop())

# Compile Slim
gulp.task 'slim', ->
    .pipe(shell(["slimrb -r ./lib/helpers.rb -p <%= file.path %> > ./#{targets.html}/<%= file.relative.replace(\".slim\", \".html\") %>"]))

# Compile CSS
gulp.task 'css', ->
  stream = streamqueue(objectMode: true)
  # Vendor files
  # App files
  stream.queue(gulp.src(sources.sass).pipe(sass(style: 'expanded', includePaths: ['src/css'], errLogToConsole: true)))
    .pipe(if isProd then uglify() else gutil.noop())

# Reload browser
gulp.task 'server', ->
  browserSync.init null,
    open: true
      baseDir: targets.html
    reloadDelay: 2000 # Prevent white screen of death
      debounceDelay: 1000

# Watch files for changes
gulp.task 'watch', -> sources.js, ['js'] sources.css, ['css'] sources.html, ['slim'] 'www/**/**', (file) ->
    browserSync.reload(file.path) if file.type is "changed"

# Build everything
gulp.task 'build', ['lint', 'js', 'css', 'slim']

# Start a server and watch for file changes
gulp.task 'default', ['watch', 'server']

Also see A gulp.js template for React.js and ES6 projects

How to get rid of Gulp, Grunt, and <your favorite JS build tool>

Tagged npm, babel, browserify, build, grunt, gulp  Languages bash

I would happily pay 50-100€ for a build tool that would help me get rid of Gulp, Grunt, etc, and save me from hours of unproductive fighting with unreliable tools.

The following snippet is not quite a full solution for getting rid of Gulp/Grunt.


npm install -g node-sass browserify babelify uglify-js


# Compile JS modules into one file
browserify js/app.js -o dist/js/app.js -t [ babelify --presets [ es2015 ] ]
# Compile CSS/SASS modules into one file
node-sass css/app.scss --output-style compressed --include-path node_modules/bootstrap-sass/assets/stylesheets dist/css/app.css
# Minify JS
uglifyjs --compress --mangle -o dist/js/app.js -- dist/js/app.js


See How to Use npm as a Build Tool.