nx/packages/cli/lib/init-local.ts

91 lines
2.1 KiB
TypeScript

import * as path from 'path';
import * as fs from 'fs';
import { Workspace } from './workspace';
import { parseRunOneOptions } from './parse-run-one-options';
/**
* Nx is being run inside a workspace.
*
* @param workspace Relevant local workspace properties
*/
export function initLocal(workspace: Workspace) {
const supportedNxCommands = require('@nrwl/workspace/src/command-line/supported-nx-commands')
.supportedNxCommands;
const runOpts = runOneOptions(workspace);
if (supportedNxCommands.includes(process.argv[2])) {
// required to make sure nrwl/workspace import works
if (workspace.type === 'nx') {
require(path.join(
workspace.dir,
'node_modules',
'@nrwl',
'tao',
'src',
'compat',
'compat.js'
));
}
require('@nrwl/workspace/src/command-line/nx-commands').commandsObject.argv;
} else {
if (runOpts === false || process.env.NX_SKIP_TASKS_RUNNER) {
loadCli(workspace);
} else {
require('@nrwl/workspace/src/command-line/run-one').runOne(runOpts);
}
}
}
function loadCli(workspace: Workspace) {
if (workspace.type === 'nx') {
require(path.join(
workspace.dir,
'node_modules',
'@nrwl',
'tao',
'index.js'
));
} else if (workspace.type === 'angular') {
require(path.join(
workspace.dir,
'node_modules',
'@angular',
'cli',
'lib',
'init.js'
));
} else {
console.error(`Cannot recognize the workspace type.`);
process.exit(1);
}
}
function runOneOptions(
workspace: Workspace
): false | { project; target; configuration; overrides } {
try {
const nxJson = JSON.parse(
fs.readFileSync(path.join(workspace.dir, 'nx.json')).toString()
);
const workspaceConfigJson = JSON.parse(
fs
.readFileSync(
path.join(
workspace.dir,
workspace.type === 'nx' ? 'workspace.json' : 'angular.json'
)
)
.toString()
);
return parseRunOneOptions(
nxJson,
workspaceConfigJson,
process.argv.slice(2)
);
} catch (e) {
return false;
}
}