Sunday, May 19, 2024
 Popular · Latest · Hot · Upcoming
167
rated 0 times [  171] [ 4]  / answers: 1 / hits: 63573  / 11 Years ago, thu, april 11, 2013, 12:00:00

Can I install a NPM package from a javascript file running in Node.js? For example, I'd like to have a script, let's call it script.js that somehow (...using NPM or not...) install a package usually available through NPM. In this example, I'd like to install FFI. (npm install ffi)


More From » node.js

 Answers
23

Update: As of November 2021, use of the programmatic API is deprecated. Consider using child_process to call the npm CLI.




It is indeed possible to use npm programmatically, and it was outlined in older revisions of the documentation. It has since been removed from the official documentation, but still exists on source control with the following statement:



Although npm can be used programmatically, its API is meant for use by
the CLI only, and no guarantees are made regarding its fitness for any
other purpose. If you want to use npm to reliably perform some task,
the safest thing to do is to invoke the desired npm command with
appropriate arguments.


The semantic version of npm refers to the CLI itself, rather than the
underlying API. The internal API is not guaranteed to remain stable
even when npm's version indicates no breaking changes have been made
according to semver
.



In the original documentation, the following is the code sample that was provided:


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) { ... })
})

Since npm exists in the node_modules folder, you can use require('npm') to load it like any other module. To install a module, you will want to use npm.commands.install().


If you need to look in the source then it's also on GitHub. Here's a complete working example of the code, which is the equivalent of running npm install without any command-line arguments:


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);
});
});

Note that the first argument to the install function is an array. Each element of the array is a module that npm will attempt to install.


More advanced use can be found in the npm-cli.js file on source control.


[#78964] Wednesday, April 10, 2013, 11 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
deonkalvinw

Total Points: 409
Total Questions: 96
Total Answers: 89

Location: Saint Pierre and Miquelon
Member since Sun, Nov 27, 2022
2 Years ago
deonkalvinw questions
Sun, Feb 6, 22, 00:00, 2 Years ago
Tue, Dec 28, 21, 00:00, 2 Years ago
Sun, Aug 22, 21, 00:00, 3 Years ago
Sun, Mar 7, 21, 00:00, 3 Years ago
;