5
0
node-binaries/node/node_modules/npm-js-interface/index.js
2025-01-29 20:51:26 +08:00

66 lines
1.7 KiB
JavaScript

function splitLine(line) {
if (line.indexOf(" ") == -1) {
return [line]
}
const args = []
let current = ""
let inQuotes = false
for (let i = 0; i < line.length; i++) {
const c = line[i]
if (c == '"') {
inQuotes = !inQuotes
}
else if (c == ' ' && !inQuotes) {
args.push(current)
current = ""
}
else {
current += c
}
}
args.push(current)
return args
}
module.exports = async (cmdLine) => {
const ExitHandler = require('../npm/lib/cli/exit-handler.js')
const exitHandler = new ExitHandler({ process })
const Npm = require('../npm/lib/npm.js')
const npm = new Npm()
exitHandler.setNpm(npm)
exitHandler.registerUncaughtHandlers()
try {
await npm.load()
if (cmdLine.length == 0) {
console.log(npm.usage)
return exitHandler.exit()
}
const args = splitLine(cmdLine)
if (args[0].indexOf("npm") != -1) {
args.shift()
}
const cmd = args.shift()
if (!cmd) {
console.log(`Unknown command: "${cmd}"\nTo see a list of supported npm commands, run:\n npm help`)
return exitHandler.exit()
}
const execPromise = npm.exec(cmd, args)
await execPromise
return exitHandler.exit()
}
catch (err) {
if (err.code === 'EUNKNOWNCOMMAND') {
console.log(`Bad command.\nTo see a list of supported npm commands, run:\n npm help`)
return exitHandler.exit(err)
}
console.log(`Error when executing npm command. ${err.message}\n\n${err.stack}\n`)
return exitHandler.exit(err)
}
}