You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在NixOS上安装NPM包与命令行工具及相关问题解决

解决NixOS上的Node.js与NPM相关问题

我来帮你逐个解决这些NixOS上的Node.js/npm问题——毕竟NixOS的只读/不可变存储设计确实和常规Linux发行版有很大区别,这也是你遇到报错的核心原因。

1. 为什么sudo npm i -g typescript会报错?如何正确安装NPM命令行工具?

你遇到的EROFS只读文件系统错误,是因为NixOS的/nix/store只读的不可变存储,所有通过Nix安装的软件都存放在这里,你无法修改它的权限(这也是为什么chown命令没用)。要安装全局NPM工具,有两种推荐方式:

方式一:用Nix官方打包的包(最符合NixOS习惯)

Nixpkgs已经打包了绝大多数流行的NPM工具,直接用nix-env安装即可:

nix-env -iA nixpkgs.nodePackages.typescript

这种方式安装的工具会自动加入你的PATH,而且和系统其他包兼容,是首选方案。

方式二:配置NPM使用用户本地的全局目录

如果你更习惯用npm i -g的方式,可以把NPM的全局安装目录改到用户可写的路径下:

  1. 设置NPM的前缀到用户目录:
    npm config set prefix '~/.npm-global'
    
  2. 把这个目录的bin文件夹加入你的Shell PATH(比如在~/.bashrc~/.zshrc里添加):
    export PATH="$HOME/.npm-global/bin:$PATH"
    
  3. 之后直接运行npm i -g typescript即可,不需要sudo——现在全局包会安装到~/.npm-global下,完全在你的用户权限范围内。

2. 如何在NixOS上安装NPM终端用户包?

这里分两种场景:

  • 项目本地依赖:和其他系统一样,直接在项目目录下运行npm install即可,依赖会安装到项目的node_modules文件夹里,完全不受NixOS的只读限制。
  • 用户级全局依赖:参考上面的方式二,配置好用户级的NPM全局目录后,用npm i -g <package>安装即可;或者用方式一,通过nix-env安装Nixpkgs里的对应包。

3. 如何在NixOS上安装Node.js 11或12版本?

Nixpkgs会维护多个Node.js版本,你可以通过指定版本别名来安装:

安装Node.js 12

nix-env -iA nixpkgs.nodejs-12_x

安装Node.js 11(注意:旧版本可能需要指定历史Nixpkgs分支)

因为Node.js 11是比较旧的版本,最新的Nixpkgs频道可能已经移除了它,你可以指定包含该版本的NixOS分支(比如19.09版本)来安装:

nix-env -iA nodejs-11_x -f https://github.com/NixOS/nixpkgs/archive/nixos-19.09.tar.gz

如果需要在不同项目中切换Node.js版本,也可以用nix-shell临时切换,比如:

# 临时进入Node.js 12的环境
nix-shell -p nodejs-12_x

内容的提问来源于stack exchange,提问作者Alexander Mills

火山引擎 最新活动