npminstall
Version:
Make npm install fast and handy.
66 lines (59 loc) • 1.71 kB
JavaScript
const path = require('node:path');
const parseArgs = require('minimist');
const {
rimraf, readWorkspaces, getWorkspaceInfos, formatWorkspaceNames, exitWithError,
} = require('../lib/utils');
function help(root) {
console.log(`
Usage:
npmupdate [--root=${root}]
`
);
process.exit(0);
}
(async () => {
const argv = parseArgs(process.argv.slice(2), {
string: [
'root',
'workspace',
],
boolean: [
'help',
'clean-only',
],
alias: {
h: 'help',
w: 'workspace',
},
});
const root = argv.root || process.cwd();
if (argv.help) return help(root);
const installWorkspaceNames = formatWorkspaceNames(argv);
const { workspaceRoots, workspacesMap } = await readWorkspaces(root);
let cleanRoots = [];
if (installWorkspaceNames.length > 0) {
const installWorkspaceInfos = await getWorkspaceInfos(root, installWorkspaceNames, workspacesMap);
if (installWorkspaceInfos.length === 0) {
throw new Error(`No workspaces found: --workspace=${installWorkspaceNames.join(',')}`);
}
cleanRoots = [ root, ...installWorkspaceInfos.map(info => info.root) ];
} else {
cleanRoots = [ root, ...workspaceRoots ];
}
for (const rootDir of cleanRoots) {
const nodeModules = path.join(rootDir, 'node_modules');
console.log('[npmupdate] removing %s', nodeModules);
await rimraf(nodeModules);
}
if (argv['clean-only']) {
console.log('');
return;
}
console.log('[npmupdate] reinstall on %s', root);
// make sure install ignore all package names
process.env.NPMINSTALL_BY_UPDATE = 'true';
require('./install');
})().catch(err => {
exitWithError('npmupdate', err);
});