Na verdade, é possível usar o npm programaticamente e ele foi descrito em revisões anteriores da documentação. Desde então, foi removido da documentação oficial, mas ainda existe no controle de origem com a seguinte declaração:
Embora o npm possa ser usado programaticamente, sua API deve ser usada apenas pela CLI e nenhuma garantia é feita em relação à sua adequação para qualquer outra finalidade. Se você quiser usar o npm para realizar alguma tarefa de maneira confiável, a coisa mais segura a fazer é invocar o comando npm desejado com os argumentos apropriados.
A versão semântica do npm se refere à própria CLI, e não à API subjacente. A API interna não tem garantia de permanecer estável, mesmo quando a versão do npm indica que nenhuma alteração significativa foi feita de acordo com semver .
Na documentação original, o seguinte é o exemplo de código fornecido:
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) { ... })
})
Como o npm existe na node_modules
pasta, você pode usar require('npm')
para carregá-lo como qualquer outro módulo. Para instalar um módulo, você vai querer usar npm.commands.install()
.
Se você precisar procurar na fonte, também está no GitHub . Aqui está um exemplo completo de trabalho do código, que é o equivalente a executar npm install
sem nenhum argumento de linha de comando:
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);
});
});
Observe que o primeiro argumento para a função de instalação é uma matriz. Cada elemento da matriz é um módulo que o npm tentará instalar.
O uso mais avançado pode ser encontrado no npm-cli.js
arquivo de controle de origem.
npm install npm --save
primeiro. Exemplo funciona muito bem :)