一尘不染

我可以从Node.js中运行的javascript安装NPM软件包吗?

node.js

我可以从Node.js中运行的javascript文件安装NPM软件包吗?例如,我想要一个脚本,让我们称它为“
script.js”,该脚本以某种方式(…是否使用NPM …)安装了通常可通过NPM获得的软件包。在此示例中,我想安装“
FFI”。(npm安装ffi)


阅读 237

收藏
2020-07-07

共1个答案

一尘不染

确实可以以编程方式使用 npm ,并且在文档的较早版本中对此进行了概述。此后,它已从官方文档中删除,但仍在源代码控制中使用以下语句:

尽管可以通过编程方式使用npm,但其API仅供CLI使用,并且不能保证其适用于任何其他目的。如果要使用npm可靠地执行某些任务,最安全的做法是使用适当的参数调用所需的npm命令。

npm的语义版本是指CLI本身,而不是基础API。 即使npm的版本指示根据semver尚未进行重大更改,也不能保证内部API保持稳定

在原始文档中,以下是所提供的代码示例:

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

请注意,install函数的第一个参数是数组。阵列的每个元素都是 npm 会尝试安装的模块。

npm-cli.js在源代码管理的文件中可以找到更高级的用法。

2020-07-07