Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/npm/cli.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorisaacs <i@izs.me>2020-07-17 04:40:44 +0300
committerisaacs <i@izs.me>2020-07-29 21:53:10 +0300
commitb12859dcb8d5a8389bd676e7e84caaf8c4de21b9 (patch)
tree5c5356f58a741a0efd2c916accc89c06a6d18fe4 /lib/cli.js
parent2eb06f128e67359efaa8d62fb2d412fc8d0cc9d0 (diff)
refactor and test for main cli script
Diffstat (limited to 'lib/cli.js')
-rw-r--r--lib/cli.js70
1 files changed, 70 insertions, 0 deletions
diff --git a/lib/cli.js b/lib/cli.js
new file mode 100644
index 000000000..f76d88991
--- /dev/null
+++ b/lib/cli.js
@@ -0,0 +1,70 @@
+// Separated out for easier unit testing
+module.exports = (process) => {
+ 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 { defs: { shorthands, types } } = require('../lib/config/core.js')
+ const errorHandler = require('../lib/utils/error-handler.js')
+ const nopt = require('nopt')
+
+ // 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')
+ }
+
+ log.verbose('cli', process.argv)
+
+ const conf = nopt(types, shorthands, process.argv)
+ npm.argv = conf.argv.remain
+
+ if (conf.version) {
+ console.log(npm.version)
+ return errorHandler.exit(0)
+ }
+
+ if (conf.versions) {
+ npm.argv = ['version']
+ conf.usage = false
+ }
+
+ log.info('using', 'npm@%s', npm.version)
+ log.info('using', 'node@%s', process.version)
+
+ process.on('uncaughtException', errorHandler)
+ process.on('unhandledRejection', errorHandler)
+
+ // now actually fire up npm and run the command.
+ // this is how to use npm programmatically:
+ conf._exit = true
+ const updateNotifier = require('../lib/utils/update-notifier.js')
+ npm.load(conf, er => {
+ if (er) return errorHandler(er)
+
+ updateNotifier(npm)
+
+ const cmd = npm.argv.shift()
+ const impl = npm.commands[cmd]
+ if (impl) {
+ impl(npm.argv, errorHandler)
+ } else {
+ npm.config.set('usage', false)
+ npm.argv.unshift(cmd)
+ npm.commands.help(npm.argv, errorHandler)
+ }
+ })
+}