Дійсно можливо використовувати npm програмно, і це було зазначено в попередніх версіях документації. З тих пір він був вилучений з офіційної документації, але все ще існує в системі контролю джерел із наступним твердженням:
Незважаючи на те, що npm можна використовувати програмно, його API призначений для використання лише CLI, і жодних гарантій щодо його придатності для будь-яких інших цілей не надається. Якщо ви хочете використовувати npm для надійного виконання якогось завдання, найбезпечніше, що потрібно зробити, це викликати потрібну команду npm з відповідними аргументами.
Семантична версія npm стосується самого CLI, а не базового API. Внутрішній API не гарантовано залишатиметься стабільним, навіть якщо версія npm вказує на відсутність змінних змін згідно Semver .
В оригінальній документації подано наступний зразок коду:
var npm = require('npm')
npm.load(myConfigObject, function (er) {
if (er) return handlError(er)
npm.commands.install(['some', 'args'], function (er, data) {
if (er) return commandFailed(er)
// command succeeded, and data might have some info
})
npm.registry.log.on('log', function (message) { ... })
})
Оскільки npm існує в node_modulesпапці, ви можете використовувати його require('npm')для завантаження, як і будь-який інший модуль. Щоб встановити модуль, потрібно використовувати npm.commands.install().
Якщо вам потрібно заглянути в джерело, це також на GitHub . Ось повний робочий приклад коду, що еквівалентно запуску npm installбез будь-яких аргументів командного рядка:
var npm = require('npm');
npm.load(function(err) {
// handle errors
// install module ffi
npm.commands.install(['ffi'], function(er, data) {
// log errors or data
});
npm.on('log', function(message) {
// log installation progress
console.log(message);
});
});
Зверніть увагу, що першим аргументом функції встановлення є масив. Кожен елемент масиву є модулем, який npm намагатиметься встановити.
Більш розширене використання можна знайти у npm-cli.jsфайлі керування джерелом.
npm install npm --saveпершим. Приклад чудово працює :)