forked from yarnpkg/yarn
/
workspace.js
52 lines (39 loc) 路 1.58 KB
/
workspace.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
// @flow
import type Config from '../../config.js';
import {MessageError} from '../../errors.js';
import type {Reporter} from '../../reporters/index.js';
import * as child from '../../util/child.js';
import {NODE_BIN_PATH, YARN_BIN_PATH} from '../../constants';
const invariant = require('invariant');
export function setFlags(commander: Object) {}
export function hasWrapper(commander: Object, args: Array<string>): boolean {
return true;
}
export async function run(config: Config, reporter: Reporter, flags: Object, args: Array<string>): Promise<void> {
const {workspaceRootFolder} = config;
if (!workspaceRootFolder) {
throw new MessageError(reporter.lang('workspaceRootNotFound', config.cwd));
}
if (args.length < 1) {
throw new MessageError(reporter.lang('workspaceMissingWorkspace'));
}
if (args.length < 2) {
throw new MessageError(reporter.lang('workspaceMissingCommand'));
}
const manifest = await config.findManifest(workspaceRootFolder, false);
invariant(manifest && manifest.workspaces, 'We must find a manifest with a "workspaces" property');
const workspaces = await config.resolveWorkspaces(workspaceRootFolder, manifest);
const [workspaceName, ...rest] = args || [];
if (!Object.prototype.hasOwnProperty.call(workspaces, workspaceName)) {
throw new MessageError(reporter.lang('workspaceUnknownWorkspace', workspaceName));
}
const workspace = workspaces[workspaceName];
try {
await child.spawn(NODE_BIN_PATH, [YARN_BIN_PATH, ...rest], {
stdio: 'inherit',
cwd: workspace.loc,
});
} catch (err) {
throw err;
}
}