#node.js #npm
Вопрос:
Четкая, умная программа, написанная в node.js вызов устаревшего npm приведет к сбою в node.js v16.11.
Пример:
const util = require('util');
const execPromisified = util.promisify(require('child_process').exec);
async function main() {
try {
const resultat = await execPromisified('npm outdated -g --depth=0');
console.log(resultat);
} catch (err) {
console.log(err);
}
}
main();
Очевидно, это не удается, потому что ребята из npm не следуют соглашению о статусе выхода.
C:temp>node p1.js
Error: Command failed: npm outdated -g --depth=0
at ChildProcess.exithandler (node:child_process:397:12)
at ChildProcess.emit (node:events:390:28)
at maybeClose (node:internal/child_process:1064:16)
at Process.ChildProcess._handle.onexit (node:internal/child_process:301:5) {
killed: false,
code: 1,
signal: null,
cmd: 'npm outdated -g --depth=0',
stdout: 'Package Current Wanted Latest Location Depended byn'
'@types/node 16.10.5 16.10.8 16.10.8 node_modules/@types/node globaln'
'ts-node 10.2.1 10.3.0 10.3.0 node_modules/ts-node globaln'
'typescript 4.4.3 4.4.4 4.4.4 node_modules/typescript globaln'
'webpack-dev-server 4.3.0 4.3.1 4.3.1 node_modules/webpack-dev-server globaln',
stderr: ''
}
Ответ №1:
2-я попытка, с этим исключением обработана
const exec = require('child_process').exec;
function execAsync (command) {
return new Promise(function (resolve, reject) {
exec(command, (error, stdout, stderr) => {
if (stderr !== '') {
reject(stderr);
} else {
resolve(stdout);
}
});
});
}
async function main() {
try {
const resultat = await execAsync('npm outdated -g --depth=0');
console.log(resultat);
} catch (err) {
console.log(err);
}
}
main();
Более ясно, как видно (иронично), но эй, это работает!!!
C:temp>node p2.js
Package Current Wanted Latest Location Depended by
@types/node 16.10.5 16.10.8 16.10.8 node_modules/@types/node global
ts-node 10.2.1 10.3.0 10.3.0 node_modules/ts-node global
typescript 4.4.3 4.4.4 4.4.4 node_modules/typescript global
webpack-dev-server 4.3.0 4.3.1 4.3.1 node_modules/webpack-dev-server global