Much faster installation which is very important for CI. We'll see if it proves difficult for deps management.
44 lines
1.1 KiB
JavaScript
Executable File
44 lines
1.1 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
|
|
const { delimiter } = require('path')
|
|
const { forEach, fromEvent } = require('promise-toolbox')
|
|
const { spawn } = require('child_process')
|
|
|
|
const { getPackages } = require('./utils')
|
|
|
|
const { env } = process
|
|
|
|
// run a script for each package (also run pre and post)
|
|
//
|
|
// TODO: https://docs.npmjs.com/misc/scripts#environment
|
|
require('exec-promise')(([ script ]) =>
|
|
getPackages(true).forEach(({ dir, name, package: { scripts } }) => {
|
|
if (scripts == null) {
|
|
return
|
|
}
|
|
|
|
const spawnOpts = {
|
|
cwd: dir,
|
|
env: Object.assign({}, env, {
|
|
PATH: `${dir}/node_modules/.bin${delimiter}${env.PATH}`
|
|
}),
|
|
shell: true,
|
|
stdio: 'inherit'
|
|
}
|
|
return forEach.call(
|
|
[ `pre${script}`, script, `post${script}` ],
|
|
script => {
|
|
const command = scripts[script]
|
|
if (command !== undefined) {
|
|
console.log(`* ${name}:${script}`)
|
|
return fromEvent(spawn(command, spawnOpts), 'exit').then(code => {
|
|
if (code !== 0) {
|
|
throw code
|
|
}
|
|
})
|
|
}
|
|
}
|
|
)
|
|
})
|
|
)
|