gulp-environment

Adds easy environment configuration and conditional piping to Gulp, based on NODE_ENV or parameters with yargs.

Usage no npm install needed!

<script type="module">
  import gulpEnvironment from 'https://cdn.skypack.dev/gulp-environment';
</script>

README

gulp-environment

Adds easy environment configuration and conditional piping to Gulp, based on NODE_ENV or parameters via yargs.

with :purple_heart:,
—@helloitsdan

Build Status

Usage

This module will load a list of available environments and try to figure out which one it's currently running in by looking at the env parameter first, falling back to the NODE_ENV environment variable if that doesn't exist, and then config.default last. These can be specified either by name directly, or by one of a few aliases. For example, development mode can be referenced as either development, dev, or local by default.

To run gulp in production mode using this module, specify your environment either via gulp --env=production or NODE_ENV=production gulp. Your gulp tasks will then be able to conditionally pipe plugins as follows...

Example

var gulp = require('gulp')
var env = require('gulp-environment')
var cleanCSS = require('gulp-clean-css')

gulp.task('minify-css', function() {
  return gulp.src([
    'assets/css/**/*.css'
  ])
    .pipe(
      env.if.production(cleanCSS()).else(neverRunThisOnLive())
    )
    .pipe(gulp.dest('web/assets/css/'))
})

Confguring environments

The module will first try to find a .gulpenvrc file from your current working directory. This should be a JSON file, formatted as follows:

{
  "environments": [
    {
      "name": "development",
      "aliases": [ "dev", "local" ]
    },
    ...
  ],

  "default": "development"
}

If the module cannot find a .gulpenvrc, it'll try and find the nearest package.json file and load config from the gulp-environment block. If neither of these are found, it'll use the default config specified in this module's .gulpenvrc.

API

Each of the methods below will be created for each of the environments defined in config.js—by default, this is development, qa, and production.

env.current

A getter/setter to access the current environment.

env.is.environment()

Returns a boolean representing whether or not the current environment is environment.

  var headers = env.is.qa() ? "QA" : "Live";

This function can also be accessed manually via env.is(environment)

env.if.environment(ifTrue)[.else(ifFalse)]

Returns ifTrue if the current environment is environment, otherwise returns a no-op. If the else chaining function is used, ifFalse will be returned when not in environment, otherwise ifTrue will be returned as normal.

  ...
  .pipe(
    env.if.production(cleanCSS()).else(neverRunThisOnLive())
  )
  ...

This function can also be accessed manually via env.if(environment, ifTrue[, ifFalse])

env.if.not.environment(ifFalse)

Returns ifFalse if the current environment is not environment, otherwise returns a no-op.

  ...
  .pipe(
    env.if.not.development(cleanCSS())
  )
  ...

This function can also be accessed manually via env.if.not(environment, ifFalse)