当前位置: 首页 > 面试题库 >

以编程方式安装提供其版本的NPM软件包

翁钧
2023-03-14
问题内容

我找到了如何以编程方式安装npm软件包,并且代码可以正常工作:

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

如果要安装hello-world软件包的第一个版本,如何使用npm模块在NodeJS端进行安装?

我知道我可以使用子进程,但是我想选择npm模块解决方案。


问题答案:

NPM NodeJS API没有很好的文档说明,但是检查代码会有所帮助。

在这里,我们找到以下字符串:

install.usage = "npm install"
              + "\nnpm install <pkg>"
              + "\nnpm install <pkg>@<tag>"
              + "\nnpm install <pkg>@<version>"
              + "\nnpm install <pkg>@<version range>"
              + "\nnpm install <folder>"
              + "\nnpm install <tarball file>"
              + "\nnpm install <tarball url>"
              + "\nnpm install <git:// url>"
              + "\nnpm install <github username>/<github project>"
              + "\n\nCan specify one or more: npm install ./foo.tgz bar@stable /some/folder"
              + "\nIf no argument is supplied and ./npm-shrinkwrap.json is "
              + "\npresent, installs dependencies specified in the shrinkwrap."
              + "\nOtherwise, installs dependencies from ./package.json."

我的问题是关于版本的,所以我们可以做:hello-world@0.0.1安装的0.0.1版本hello-world

var npm = require("npm");
npm.load({
    loaded: false
}, function (err) {
  // catch errors
  npm.commands.install(["hello-world@0.0.1"], function (er, data) {
    // log the error or data
  });
  npm.on("log", function (message) {
    // log the progress of the installation
    console.log(message);
  });
});

我没有进行测试,但是我确信我们可以使用任何格式的install.usage解决方案。

我编写了一个函数,该函数将dependencies对象转换为可以传递给install函数调用的数组。

dependencies:

{
   "hello-world": "0.0.1"
}

该函数获取package.json文件的路径并返回字符串数组。

function createNpmDependenciesArray (packageFilePath) {
    var p = require(packageFilePath);
    if (!p.dependencies) return [];

    var deps = [];
    for (var mod in p.dependencies) {
        deps.push(mod + "@" + p.dependencies[mod]);
    }

    return deps;
}


 类似资料:
  • 问题内容: 如何找到已安装的node.js / npm 软件包 的版本? 这将打印npm本身的版本: 这将显示一个神秘的错误: 这将 在注册表上 打印软件包版本(即可用的最新版本): 如何获得已 安装的版本 ? 问题答案: 用于本地软件包或全局安装的软件包。 您可以通过传递特定软件包的名称作为参数来查找其版本。例如,将导致: 或者,您可以直接运行而无需将软件包名称作为参数来查看所有软件包的版本:

  • 问题内容: 我使用nvm下载节点v0.4.10,并安装了npm以与该版本的节点一起使用。 我正在尝试使用安装Express 我得到一个错误,表示需要节点版本> = 0.5.0。 好吧,这很奇怪,因为我遵循的是这里使用节点v0.4.10 的node + express + mongodb教程的说明,因此我假设express可用于节点v0.4.10。如果我的假设是正确的,我如何告诉npm获取适用于我的

  • 问题内容: 当前,如果我运行,它将安装已安装软件包的更新版本。如何安装文件中指定的确切版本? 问题答案: 这种行为实际上是由在package.json中指定版本的行为驱动的。如果版本号看起来像“ 1.0.0”,没有任何其他符号,则应安装确切的版本(1.0.0)。 因此,您可以做的就是简单地修改package.json并运行then。在执行此操作之前,请确保清除node_modules目录。 htt

  • 问题内容: 是否存在任何npm选项来在安装软件包时禁用安装后脚本?还是要重写package.json中的任何字段? 问题答案: 仅禁用脚本是不可能的。但是,您可以使用以下命令禁用所有脚本: 正如注释中提到的delbertooo一样,这也会禁用依赖项的脚本。

  • 我需要使用sharp软件包来调整Lambda函数中的图像大小,但它在我的Windows机器中进行“NPM安装”时构建了本机代码,这在承载Lambda的Amazon Linux服务器中肯定行不通。 在使用无服务器时,有什么推荐的方法来解决这个问题?

  • 问题内容: 我想使用conda在当前的活动环境中安装“ rope”软件包。当前,以下“绳索”版本可用: 我想安装以下软件: 我已经尝试过各种“ conda install”的排列方式,因为它们都不正确,所以这里不再列出。 我也不确定 py35_0 是什么(我假设这是针对其构建软件包的python版本?),我也不知道’defaults’是什么意思? 问题答案: 没有适用于的版本。指包装。的最高可用版