-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathsubpkg.js
executable file
·74 lines (63 loc) · 2.05 KB
/
subpkg.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#!/usr/bin/env node
var fs = require('fs');
var path = require('path');
var spawnSync = require('cross-spawn').sync;
var hasYarn = require('has-yarn');
var envSetterRegex = /(\w+)=('(.+)'|"(.+)"|(.+))/;
var envUseUnixRegex = /\$(\w+)/g; // $my_var
var envUseWinRegex = /\%(.*?)\%/g; // %my_var%
var isWin = process.platform === 'win32';
var envExtract = isWin ? envUseUnixRegex : envUseWinRegex;
function commandConvert(command) {
var match = envExtract.exec(command);
if (match) {
command = isWin ? `%${match[1]}%` : `$${match[1]}`;
}
return command;
}
function getCommandArgsAndEnvVars(args) {
var command;
var envVars = Object.assign({}, process.env);
var commandArgs = args.map(commandConvert);
while (commandArgs.length) {
var shifted = commandArgs.shift();
var match = envSetterRegex.exec(shifted);
if (match) {
envVars[match[1]] = match[3] || match[4] || match[5];
} else {
command = shifted;
break;
}
if (process.env.APPDATA) {
envVars.APPDATA = process.env.APPDATA;
}
}
commandArgs.unshift(command);
return {
commandArgs: commandArgs,
envVars: envVars
};
}
var c = getCommandArgsAndEnvVars(process.argv.slice(2));
if (c.commandArgs.length) {
var pkgJson = require(path.join(process.cwd(), 'package.json'));
var subPackages = pkgJson.subPackages;
if (!subPackages) {
throw new Error('No "subPackages" entry found in package.json.');
}
console.log('Running\x1b[36m', process.argv.slice(2).join(' '), '\x1b[0mfor', subPackages.length, 'packages...');
for (var i=0; i<subPackages.length; i++) {
var subPkgPath = path.join(process.cwd(), subPackages[i])
var subPkgJson = require(path.join(subPkgPath, 'package.json'));
var subPkgCmd = hasYarn(subPkgPath) ? 'yarn' : 'npm';
console.log('Package \x1b[34m' + subPkgJson.name + '\x1b[0m ...');
var result = spawnSync(subPkgCmd, c.commandArgs, {
stdio: 'inherit',
env: c.envVars,
cwd: path.resolve(subPkgPath)
});
if (result.status != 0) {
process.exit(result.status);
}
}
}