如何在NixOS上安装NPM最终用户软件包?

时间:2019-06-28 21:17:53

标签: nix chown nixos

是否可以在NixOS上安装NPM命令行工具?

[root@ip-xxx-xxx-0-27:~/teros/ntrs-cli]# sudo npm i -g typescript
npm WARN checkPermissions Missing write access to /nix/store/rhikjv5vlpa6vq4qkrszinwsaz1mda7p-nodejs-8.15.1/lib/node_modules
npm ERR! path /nix/store/rhikjv5vlpa6vq4qkrszinwsaz1mda7p-nodejs-8.15.1/lib/node_modules
npm ERR! code EROFS
npm ERR! errno -30
npm ERR! syscall access
npm ERR! rofs EROFS: read-only file system, access '/nix/store/rhikjv5vlpa6vq4qkrszinwsaz1mda7p-nodejs-8.15.1/lib/node_modules'
npm ERR! rofs Often virtualized file systems, or other file systems
npm ERR! rofs that don't support symlinks, give this error.

我认为是因为它是只读的,因为我确实运行过:

chown -R `whoami` nix/store/rhikjv5vlpa6vq4qkrszinwsaz1mda7p-nodejs-8.15.1

顺便说一句,如果有人知道如何在nixos上安装Node.js版本11或12,那就太好了。

4 个答案:

答案 0 :(得分:3)

改为编辑~/.npmrc,以便它告诉npm在您的主文件夹(而不是根目录)中安装并找到“全局”软件包:

prefix=~/.npm-packages

现在任何时候运行npm i -g <some-package>都会看到它会安装在~/.npm-packages内部。

现在,在您的Shell rc文件(例如.bashrc.zshrc或类似文件中)中,您需要更新PATH以包括新位置的可执行文件:

### Add NPM executables to your PATH so that they are available as commands:
export PATH="$HOME/.npm-packages/bin:$PATH"

通常,在系统级程序包管理器之外管理临时依赖项更为方便。

如果您使用nnvm之类的方法来管理特定的节点版本,则可以通过在主文件夹中对其进行管理来执行类似的操作。

答案 1 :(得分:1)

首先,请撤消您所做的权限更改(chown)。您永远不要更改Nix存储区(/nix/store中文件的权限。

要在NixOS上安装NPM软件包,请使用相应的Nix软件包,而不要使用npm -g ...。 NPM软件包位于nodePackages“命名空间”下。

例如,要安装打字稿(tsc),请编辑/etc/nixos/configuration.nix

...

environment.systemPackages = with pkgs; [
  ...

  nodePackages.typescript;
]

...

然后使用nixos-rebuild switch“安装”软件包。

您可以用相同的方式安装Node.js。使用nix search nodejs查看可以安装的各种版本。

答案 2 :(得分:0)

您也可以使用普通的npm -i...安装它们,而无需使用-g(全局)参数。

答案 3 :(得分:0)