NixOS 安装特定版本的 NodeJS

8

我可以看到NixOS有以下版本可供安装:

...
nodejs-0.10-statsd-0.7.2
nodejs-0.10.42
nodejs-4.3.1
nodejs-5.9.0
...

然而,systemPackages不允许我安装nodejs-5.9.0,因为它抱怨说:

error: syntax error, unexpected INT, expecting ID or OR_KW or DOLLAR_CURLY or '"', at /etc/nixos/configuration.nix:49:14
(use ‘--show-trace’ to show detailed location information)
error: syntax error, unexpected INT, expecting ID or OR_KW or DOLLAR_CURLY or '"', at /etc/nixos/configuration.nix:49:14
(use ‘--show-trace’ to show detailed location information)
building the system configuration...
error: syntax error, unexpected INT, expecting ID or OR_KW or DOLLAR_CURLY or '"', at /etc/nixos/configuration.nix:49:14
(use ‘--show-trace’ to show detailed location information)

这让我想到我做错了什么。我不想只用nix-env -i ...安装,因为我希望它是系统级的(而且我正在为所有开发机器构建我的标准NixOS配置)。
根据nixpkgs存储库,v6可用,但我不知道如何通过configuration.nix或其他方式告诉nixos-rebuild如何安装它。
我该如何正确配置才能安装最新版本的NodeJS,或者特别是5.9.0?

1
我来这里是为了寻找完全相同的问题的答案。有两个已删除的答案说如果你需要一个特定版本的node,可以使用nvm。不幸的是,它们都被downvote并且作者删除了它们。事实证明,nix的作者也建议这样做。如果你需要一个确切的版本,nix不是你的工具。 - JohnnyLambada
2个回答

11

事实证明这是可能的,但我使用了错误的包名称。如果您使用nix-env -qaP | grep nodejs查询,您可以从其命名空间中获取名称:

$ nix-env -qaP | grep nodejs
nixos.statsd                                                          nodejs-0.10-statsd-0.7.2
nixos.nodejs-0_10                                                     nodejs-0.10.42
nixos.nodejs                                                          nodejs-4.3.1
*nixos.nodejs-5_x                                                      nodejs-5.9.0*
nixos.azure-cli                                                       nodejs-azure-cli-0.9.15
nixos.dnschain                                                        nodejs-dnschain-0.5.3
nixos.groovebasin                                                     nodejs-groovebasin-1.5.1
nixos.keybase                                                         nodejs-keybase-0.8.25
nixos.npm2nix                                                         nodejs-npm2nix-5.12.0
nixos.pumpio                                                          nodejs-pump.io-git-2015-11-09
nixos.ripple-rest                                                     nodejs-ripple-rest-1.7.0-rc1
nixos.shout                                                           nodejs-shout-0.51.1
nixos.sloc                                                            nodejs-sloc-0.1.9
nixos.wring                                                           nodejs-wring-1.0.0

我特别需要 NodeJS 5.9.0 版本,这意味着我需要使用如上所述的 nodejs-5_x 包(强调是我的需求)。


当编写答案时,将最终解决方案放在那里会有所帮助,你知道我在说什么,就像我从谷歌来到这里,因为我想在nixos上安装nodejs,但是根据你的答案只有你受益,我不能只复制命令来运行它。 - user5047085

1

最新的nixpkgs仅提供部分Node版本。其他Node版本(如nodejs-11)因产品生命周期结束(EOL)而被移除

这些已移除的版本可以在著名的lazamar工具中找到。

因此,要使用nodejs-11(例如)

{ stdenv }:
let
  # nodejs-11_x was removed, EOL 2019-06-01
  # https://github.com/NixOS/nixpkgs/pull/70256
  nodejs-11_x = (import (builtins.fetchGit {
    # https://lazamar.co.uk/nix-versions/?channel=nixpkgs-unstable&package=nodejs
    name = "nixpkgs-nodejs-11.15.0"; # name in nix store
    url = "https://github.com/NixOS/nixpkgs/";
    ref = "refs/heads/nixpkgs-unstable";
    rev = "84f318e323989435d5dd54b4038b0af728f20c85";
  }) {}).nodejs-11_x;
in
stdenv.mkDerivation {
  # ...
}

注意:这将从源代码编译Node.js,可能需要几个小时。待办事项:查找公共二进制缓存


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接