123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- #!/usr/bin/env node
- ;(function () { // wrapper in case we're in module_context mode
- // windows: running "npm blah" in this folder will invoke WSH, not node.
- /* global WScript */
- if (typeof WScript !== 'undefined') {
- WScript.echo(
- 'npm does not work when run\n' +
- 'with the Windows Scripting Host\n\n' +
- "'cd' to a different directory,\n" +
- "or type 'npm.cmd <args>',\n" +
- "or type 'node npm <args>'."
- )
- WScript.quit(1)
- return
- }
- process.title = 'npm'
- var unsupported = require('../lib/utils/unsupported.js')
- unsupported.checkForBrokenNode()
- var log = require('npmlog')
- log.pause() // will be unpaused when config is loaded.
- log.info('it worked if it ends with', 'ok')
- unsupported.checkForUnsupportedNode()
- var npm = require('../lib/npm.js')
- var npmconf = require('../lib/config/core.js')
- var errorHandler = require('../lib/utils/error-handler.js')
- var replaceInfo = require('../lib/utils/replace-info.js')
- var configDefs = npmconf.defs
- var shorthands = configDefs.shorthands
- var types = configDefs.types
- var 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')
- }
- var args = replaceInfo(process.argv)
- log.verbose('cli', args)
- var conf = nopt(types, shorthands)
- npm.argv = conf.argv.remain
- if (npm.deref(npm.argv[0])) npm.command = npm.argv.shift()
- else conf.usage = true
- if (conf.version) {
- console.log(npm.version)
- return errorHandler.exit(0)
- }
- if (conf.versions) {
- npm.command = 'version'
- conf.usage = false
- npm.argv = []
- }
- log.info('using', 'npm@%s', npm.version)
- log.info('using', 'node@%s', process.version)
- process.on('uncaughtException', errorHandler)
- process.on('unhandledRejection', errorHandler)
- if (conf.usage && npm.command !== 'help') {
- npm.argv.unshift(npm.command)
- npm.command = 'help'
- }
- var isGlobalNpmUpdate = conf.global && ['install', 'update'].includes(npm.command) && npm.argv.includes('npm')
- // now actually fire up npm and run the command.
- // this is how to use npm programmatically:
- conf._exit = true
- npm.load(conf, function (er) {
- if (er) return errorHandler(er)
- if (
- !isGlobalNpmUpdate &&
- npm.config.get('update-notifier') &&
- !unsupported.checkVersion(process.version).unsupported
- ) {
- const pkg = require('../package.json')
- let notifier = require('update-notifier')({pkg})
- const isCI = require('ci-info').isCI
- if (
- notifier.update &&
- notifier.update.latest !== pkg.version &&
- !isCI
- ) {
- const color = require('ansicolors')
- const useColor = npm.config.get('color')
- const useUnicode = npm.config.get('unicode')
- const old = notifier.update.current
- const latest = notifier.update.latest
- let type = notifier.update.type
- if (useColor) {
- switch (type) {
- case 'major':
- type = color.red(type)
- break
- case 'minor':
- type = color.yellow(type)
- break
- case 'patch':
- type = color.green(type)
- break
- }
- }
- const changelog = `https://github.com/npm/cli/releases/tag/v${latest}`
- notifier.notify({
- message: `New ${type} version of ${pkg.name} available! ${
- useColor ? color.red(old) : old
- } ${useUnicode ? '→' : '->'} ${
- useColor ? color.green(latest) : latest
- }\n` +
- `${
- useColor ? color.yellow('Changelog:') : 'Changelog:'
- } ${
- useColor ? color.cyan(changelog) : changelog
- }\n` +
- `Run ${
- useColor
- ? color.green(`npm install -g ${pkg.name}`)
- : `npm i -g ${pkg.name}`
- } to update!`
- })
- }
- }
- npm.commands[npm.command](npm.argv, function (err) {
- // https://genius.com/Lin-manuel-miranda-your-obedient-servant-lyrics
- if (
- !err &&
- npm.config.get('ham-it-up') &&
- !npm.config.get('json') &&
- !npm.config.get('parseable') &&
- npm.command !== 'completion'
- ) {
- console.error(
- `\n ${
- npm.config.get('unicode') ? '🎵 ' : ''
- } I Have the Honour to Be Your Obedient Servant,${
- npm.config.get('unicode') ? '🎵 ' : ''
- } ~ npm ${
- npm.config.get('unicode') ? '📜🖋 ' : ''
- }\n`
- )
- }
- errorHandler.apply(this, arguments)
- })
- })
- })()
|