helps ensure promake rules will rerun when environment variables have changed
envRule
s you define write the values of the environment variables you specify to a target file you specify. However,
it won't modify the file if the current values are equal to the ones in the file (from the last build), so by making the
target file a prerequisite of another rule
, you can ensure that rule will rerun whenever any of those environment
variable values is different from the last build.
npm install --save promake-env
First you create the function for defining environment rules by passing the rule
function from Promake
:
const Promake = require('promake')
const { rule } = new Promake()
const envRule = require('promake-env').envRule(rule)
Then you call the envRule
function with (file, vars)
to define a rule for creating and updating file
.
Make sure to include file
in the prerequisites
of any other rules
you want to rerun when the environment variables
change.
The name of the file to write the environment variable values to.
An array of environment variable names to check for changes and write to the file.
Allows you to customize which environment variables are used. Should be a function which returns a promise that will resolve to the environment variable hash you wish to use.
Here's a make script for a babel project that makes sure it will recompile all the code when run with a different
NODE_ENV
or BABEL_ENV
.
#!/usr/bin/env node
const Promake = require('promake')
const glob = require('glob').sync
const fs = require('fs-extra')
const buildEnv = 'lib/.buildEnv'
const srcFiles = glob('src/server/**/*.js')
const libFiles = srcFiles.map((file) => file.replace(/^src/, 'lib'))
const prerequisites = [
...srcFiles,
buildEnv,
'.babelrc',
...glob('src/**/.babelrc'),
]
const { rule, task, cli, exec } = new Promake()
const envRule = require('promake-env').envRule(rule)
envRule(buildEnv, ['NODE_ENV', 'BABEL_ENV'])
rule(libFiles, prerequisites, () => exec('babel src/ --out-dir lib'))
task('build', libFiles)
task('clean', () => fs.remove('build'))
cli()