gpt4 book ai didi

node.js - 根据引擎使用不同版本的npm依赖

转载 作者:搜寻专家 更新时间:2023-10-31 23:21:02 25 4
gpt4 key购买 nike

我需要根据 Node 引擎指定不同版本的依赖项。像这样:

{
"node": {
"0.10.x": {
"zombie": "2.5.1"
},
"0.12.x": {
"zombie": "^3.5.0"
}
},
"iojs": {
"^3.0.0": {
"zombie": "^4.0.0"
}
}
}

这是内置的还是有一个模块可以实现这种功能?

最佳答案

“是的,但是……”

不是内置的,但可能。

明智的做法是什么? ...

:)

// simplifying for the answer, only looking at node versions...

var npm = require("npm");
var semver = require("semver");

if (semver.satisfies(process.version, "0.12.x")){
npm.load(null, function(){
installPkg("chalk", "0.5.1");
})
}

function installPkg(pkg, ver) {
if(require.resolve(pkg)){
throw Error("package already installed");
}
var semverPkg = pkg + "@" + ver;
npm.commands.install([semverPkg], function (err, result) {
if (err) console.log("error loading chalk");
});
}

以编程方式使用 NPM 有点令人沮丧,因为它没有很好的文档记录。当其他人为您完成所有工作时,Semver 非常酷,但构建比较/满足检查是一项乏味的工作。

此外,这样做,您可能不想每次都尝试安装,因此您现在还必须进行某种启动检查,以确保您不会因为它每次都重新安装每个包..

您可以通过检查模块来解决这个问题。如果您决定继续沿着这条路走下去,有几种方法可以解决这个问题。

首先,您可以使用 require.resolve()以粗暴的方式查看模块是否存在。 (这就是上面示例中的内容。)

其次,你还可以使用npm.commands.ls看起来有点像这样:

if (semver.satisfies(process.version, "0.12.x")){
npm.load(null, function(){
npm.commands.ls([], function(err, data,lite){
// parse the results from ls here, and install or not, etc...
console.log(lite);
});
})
}

所以是的...这在技术上不是问题的解决方案,因为问题范围很广。 (不是钓鱼让你接受,只是解释说我感受到你的痛苦并且一直在走类似的路,这就是我之前详细探索 semver 和 npm 的原因。)

痛苦的部分:

  • 使用 semver 进行解析很“有趣”
  • 按 Node 版本维护模块 list 很“有趣”
  • 以编程方式使用 npm 很“有趣”

对比:

  • 维护几个不同的 package.json 版本
  • 编写一些“DevOps”脚本来为您处理特定于环境的安装(grunt-node-version?)
  • 花更少的时间查看 npm、semver 等的源代码...

关于node.js - 根据引擎使用不同版本的npm依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32235414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com