runfile
v0.3.0
Published
A minimal alternative for GNU Makefile.
Downloads
330
Readme
runfile
🚧 A minimal alternative for GNU Makefile. You can use Shell commands, External tools in your OS directly and synchronously with Runfile.
Additionally it's brought with built-in ES2015 support through Babel.
Install
npm install -g runfile --production
Example
An example Runfile
task('clean', () => {
rm('-rf', 'testFolder')
rm('-rf', 'testSource')
})
// or run external tools
task('deploy', () => {
var message = argv._[1] || 'update'
exec('git add -A')
exec(`git commit -m "${message}"`)
exec('git push origin master')
})
task('default', ['clean', 'deploy'])
// alia `run path` to external command `echo $PATH`
// to print your $PATH info in console
// a short-hand for one-line task
alias('path', 'echo $PATH')
// or a sequence of commands
alias('async', [
'echo Hi',
'sleep 1',
'echo After 1s'
])
then in your favorite terminal:
run clean
run deploy
Run tasks synchronously
task('timeout', (callback) => {
setTimeout(() => {
console.log('timeout')
callback()
}, 3000)
})
task('log', ['timeout'], () => {
console.log(argv)
})
task('default', ['log'])
// then `run`
Run non-block synchronous task
Besides exec()
and built-in shell commands, async/await
also allows you to write async code in sync way (looks like).
import fs from 'fs'
function readFile (name) {
return new Promise(function (resolve, reject) {
fs.readFile(name, 'utf-8', function (err, data) {
if (err) {
reject(err)
}
resolve(data)
})
})
}
task('async', async () => {
let data = await readFile('Runfile')
console.log(data)
})
Trigger a task by hand
task('emit', () => {
emit('deploy')
})
Running Node executable inside ./node_modules/.bin
// just a short-hand for `./node_modules/.bin/webpack`
task('webpack', () => {
const webpack = npm('webpack --hot --inline')
if (process.platform === 'win32') {
exec(`set NODE_ENV=development && ${webpack}`)
} else {
exec('NODE_ENV=development ${webpack}')
}
})
Run task from global Runfile
Sometimes you repeat some common operations so you will always need a Runfile
stored globally to access from anywhere.
// find task `git` in `~\.runfile\Runfile`
run git -g
// alias
run :git
License
MIT.