@redisrupt/bnr v5.0.3
IMPORTANT
This fork adds the following:
- ability to specify several commands to be executed in sequence
- ability to specify an external file with the tasks config, exported as a function or as an object.
- add
npm binoutput to theprocess.env.PATH - the
commandorcmdcan be a function. The function receive the parameters passed to it inthe command line, if the function return a string. Then the string is passed to the shell to be executed. the function receive 2 arguments, the extra parameters parsed by minimist and the raw array of parameters provided. the ability of have script tasks that only execute a function. when the script only defines a task key, it is assumed we don't want to excute anything in the shell but just call the function directly.
These tasks functions receive only an object argument with the following properties:
config, the config object that holds the tasks definitionsargs, the parsed argumentsrawArgs, the raw arguments as they are received in the command line
Intro
Better NPM scripts runner
- Avoid hard-coded commands in package.json
- Cross-platform compatibility, originally needed by:
Inspired by
Alternatives
Usage in package.json
From this:
{
"scripts": {
"build:dist": "NODE_ENV=development webpack --config $npm_package_webpack --progress --colors",
"test": "NODE_ENV=production karma start"
}
}To this:
{
"devDependencies": {
"better-npm-run": "~0.0.1"
},
"scripts": {
"build:dist": "better-npm-run build:dist",
"build:prod": "better-npm-run build:prod",
"test": "better-npm-run test"
},
"betterScripts": {
"build:dist": "webpack --config $npm_package_webpack --progress --colors",
"build:prod": {
"command": "webpack --config $npm_package_webpack --progress --colors",
"env": {
"NODE_ENV": "production"
}
},
"test": {
"command": "karma start",
"env": {
"NODE_ENV": "test"
}
}
}
}The betterScripts script definition can either be a string or sub-object with command and env attributes. Values defined in the env block will override previously set environment variables.
.env File
If you have an .env file in your project root it will be loaded on every command.
NODE_PATH=./:./lib
NODE_ENV=development
PORT=5000Environment variables defined in the betterScripts script definition will take precedence over .env values.
Shell scripts
Currently, using bash variables (PWD, USER, etc.) is not possible:
"command": "forever start -l ${PWD}/logs/forever.log -o ${PWD}/logs/out.log -e ${PWD}/logs/errors.log -a index.js",In order to use them, you can create an script file (.sh) instead:
forever.sh:
forever start -l ${PWD}/logs/forever.log -o ${PWD}/logs/out.log -e ${PWD}/logs/errors.log -a index.jspackage.json:
"command": "./forever.sh"cli commands
This module expose 2 cli commands:
better-npm-runand,- a shorter one:
bnrwhich is an alias to the former.
The shorter one is useful for cases where you have a script that calls several better-npm-run scripts. e.g:
using the normal cli name
"scripts": {
"dev": "shell-exec 'better-npm-run install-hooks' 'better-npm-run watch-client' 'better-npm-run start-dev' 'better-npm-run start-dev-api' 'better-npm-run start-dev-worker' 'better-npm-run start-dev-socket'",
}using the shorter alias
"scripts": {
"dev": "shell-exec 'bnr install-hooks' 'bnr watch-client' 'bnr start-dev' 'bnr start-dev-api' 'bnr start-dev-worker' 'bnr start-dev-socket'",
}