123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- // Separated out for easier unit testing
- module.exports = async (process) => {
- // set it here so that regardless of what happens later, we don't
- // leak any private CLI configs to other programs
- process.title = 'npm'
- const {
- checkForBrokenNode,
- checkForUnsupportedNode,
- } = require('../lib/utils/unsupported.js')
- checkForBrokenNode()
- const log = require('npmlog')
- // pause it here so it can unpause when we've loaded the configs
- // and know what loglevel we should be printing.
- log.pause()
- checkForUnsupportedNode()
- const npm = require('../lib/npm.js')
- const exitHandler = require('../lib/utils/exit-handler.js')
- exitHandler.setNpm(npm)
- // if npm is called as "npmg" or "npm_g", then
- // run in global mode.
- if (process.argv[1][process.argv[1].length - 1] === 'g')
- process.argv.splice(1, 1, 'npm', '-g')
- const replaceInfo = require('../lib/utils/replace-info.js')
- log.verbose('cli', replaceInfo(process.argv))
- log.info('using', 'npm@%s', npm.version)
- log.info('using', 'node@%s', process.version)
- process.on('uncaughtException', exitHandler)
- process.on('unhandledRejection', exitHandler)
- const updateNotifier = require('../lib/utils/update-notifier.js')
- // now actually fire up npm and run the command.
- // this is how to use npm programmatically:
- try {
- await npm.load()
- if (npm.config.get('version', 'cli')) {
- npm.output(npm.version)
- return exitHandler()
- }
- // npm --versions=cli
- if (npm.config.get('versions', 'cli')) {
- npm.argv = ['version']
- npm.config.set('usage', false, 'cli')
- }
- updateNotifier(npm)
- const cmd = npm.argv.shift()
- if (!cmd) {
- npm.output(npm.usage)
- process.exitCode = 1
- return exitHandler()
- }
- const impl = npm.commands[cmd]
- if (!impl) {
- const didYouMean = require('./utils/did-you-mean.js')
- const suggestions = await didYouMean(npm, npm.localPrefix, cmd)
- npm.output(`Unknown command: "${cmd}"${suggestions}\n\nTo see a list of supported npm commands, run:\n npm help`)
- process.exitCode = 1
- return exitHandler()
- }
- impl(npm.argv, exitHandler)
- } catch (err) {
- return exitHandler(err)
- }
- }
|