Nixos

如何在 NixOS 中安裝 npm 包?

  • August 25, 2020

在 NixOS 中,我yarn像往常一樣通過執行$ nix-env -i yarn. 現在我正在嘗試yarn通過$ yarn start. 但這導致我出現以下錯誤。

$ yarn start
   yarn start v0.20.3
   $ webpack-dev-server --env dev 
   sh: webpack-dev-server: command not found
   error Command failed with exit code 127.

當我嘗試以webpack-dev-server通常的 NixOS 方式安裝時,我收到“不匹配派生”錯誤。

$ nix-env -i webpack-dev-server
error: selector ‘webpack-dev-server’ matches no derivations

我讀到這webpack-dev-server是一個 npm 包,在這種情況下我不確定關於它的相關性的幾個問題。

  1. 在 Nix 下使用 npm(與 nix 不同的包管理器)有意義嗎?
  2. 如果 (1) 的答案是肯定的,那麼如何在 NixOS 上安裝 npm?通過 搜尋時我看不到 npm 可用nix-env,因為$ nix-env -qa npm也沒有匹配任何派生。

webpack-dev-server在 NixOS上安裝的正確方法是什麼?


編輯

我嘗試webpack-dev-server按照註釋連結進行安裝並且能夠安裝node2nix,但無法按照自述文件中列出的步驟 2 進行操作。

我找到了第 2 步中引用的/nix/store文件

/nix/store/sgk7sxgqxrv2axkxjwc3y15apcqbrv1z-nixos-17.03.1482.1b57bf274a/nixos/pkgs/development/node-packages/node-packages.json

我可以打開該文件以查看列出的 npm 包,但權限是只讀的,即使使用 sudo 執行也是如此——所以我需要編輯它的權限才能更改它。

看來我不應該/nix/store直接編輯這個文件,而應該通過 nix 間接操作它。**我不應該直接編輯這個文件是正確的嗎?**如果是這樣,我還能如何通過使用 nix 或其他東西來完成第 2 步webpack-dev-server

通過 nix 使用 npm 包有多種方式:

對於我的個人項目,我nix-shell在 shell 中使用npm 腳本來防止需要 npm 全域包(如 gulp)。這個過程看起來像這樣(對於紗線來說可能非常相似):

$ nix-shell -p nodejs-8_x
[nix-shell:yourproject]$ npm install # installs npm deps to project-local node_modules
[nix-shell:yourproject]$ npm exec (...) # using scripts configured in package.json

這對我很有效,因為我的包都沒有二進制依賴項。這篇文章描述了為您的項目創建 default.nix,因此您不必為每次呼叫 nix-shell 指定依賴項,但它是可選的。

另一種方法是使用 npm2nix:

node2nix -i node-packages.json # creates ./default.nix
nix-shell # nix-shell will look for a default.nix, which above will have generated

這將導致 Nix 管理項目中的所有 npm 包。

熟悉 nix-shell 可能是一個好主意,因為嘗試在您的 nix 配置文件中安裝節點包/任何依賴項(通過 nix-env 或 nox)通過污染“全域”命名空間來破壞 nix 的目的。

引用自:https://unix.stackexchange.com/questions/379842