如何在 NixOS 中安裝 npm 包?
在 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 包,在這種情況下我不確定關於它的相關性的幾個問題。
- 在 Nix 下使用 npm(與 nix 不同的包管理器)有意義嗎?
- 如果 (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 的目的。