I found how to install npm packages programmatically and the code works fine:
var npm = require("npm");
npm.load({
loaded: false
}, function (err) {
// catch errors
npm.commands.install(["my", "packages", "to", "install"], function (er, data) {
// log the error or data
});
npm.on("log", function (message) {
// log the progress of the installation
console.log(message);
});
});
If I want to install the first version of hello-world
package, how can I do this in the NodeJS side, using npm
module?
I know that I can use child process, but I want to choose the npm
module solution.
As I'm doing this kind of implem A LOT for my work I wrote a simple, yet efficient, nodeJS module to handle the process easily.
Github repository of npmi
or
When I'm writing an app that has dependencies I use the package.json file and include it in the directory with my app. It looks maybe a bit like this.
I think you can use similar format to install with NPM from command line. With package.json you just do npm install -d (assuming the -d stands for "dependencies")
You're question is about doing it programatically. Have you tried simple adding a second argument like ("npm@version #")?
If I were doing it programmatically I might try something like this:
That way I can maintain version control and use the simplicity of the package.json file.
I added some more info in the comments, in case you haven't looked yet, here are the docs for npm install. https://npmjs.org/doc/cli/npm-install.html
I've been unable to dig up any other specific information on your specific case, perhaps there is no method to install by version programmatically, but that wouldn't make sense, it has to be doable.
NPM NodeJS API is not well documented, but checking the code helps up.
Here we find the following string:
My question is about the version, so we can do:
hello-world@0.0.1
to install0.0.1
version ofhello-world
.I didn't test, but I am sure that we can use any format of the
install.usage
solutions.I wrote a function that converts the
dependencies
object in an array that can be passed to theinstall
function call.dependencies:
The function gets the path to the
package.json
file and returns an array of strings.I'm the author of module that allow to do what you have in mind. See live-plugin-manager.
You can install and run virtually any package from NPM, Github or from a folder.
Here an example:
In the above code I install
moment
package at runtime, load and execute it. At the end I uninstall it.Internally I don't run
npm
cli but actually download packages and run inside a node VM sandbox.To install a specific version just use: