是否可以在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,那就太好了。
答案 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"
通常,在系统级程序包管理器之外管理临时依赖项更为方便。
如果您使用n
或nvm
之类的方法来管理特定的节点版本,则可以通过在主文件夹中对其进行管理来执行类似的操作。
答案 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)
npm config set prefix '~/mutable_node_modules'
这个帖子应该会有所帮助: