在 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.
Run Code Online (Sandbox Code Playgroud)
当我尝试以webpack-dev-server
我通常的 NixOS 方式安装时,出现“匹配无派生”错误。
$ nix-env -i webpack-dev-server
error: selector ‘webpack-dev-server’ matches no derivations
Run Code Online (Sandbox Code Playgroud)
我读到这webpack-dev-server
是一个 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
Run Code Online (Sandbox Code Playgroud)
我可以打开该文件以查看列出的 npm 包,但权限是只读的,即使使用 sudo 运行 - 所以我需要编辑它的权限才能更改它。
看来我不应该/nix/store
直接编辑这个文件,而应该通过 nix 间接操作它。我不应该直接编辑这个文件是正确的吗?如果是这样,我还能如何通过使用 nix 或添加其他内容来完成第 2 步webpack-dev-server
?
小智 19
通过 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
Run Code Online (Sandbox Code Playgroud)
这对我很有效,因为我的包都没有二进制依赖项。这篇文章描述了为你的项目创建一个 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
Run Code Online (Sandbox Code Playgroud)
这将导致 Nix 管理项目中的所有 npm 包。
熟悉 nix-shell 可能是一个好主意,因为尝试在您的 nix 配置文件中安装节点包/任何依赖项(通过 nix-env 或 nox)通过污染“全局”命名空间而违背了 nix 的目的。
wiz*_*zup 11
出于某种原因,nodePackages 不在根命名空间中,无法通过使用找到 nix-env -qa
用于nix-env -qaPA nixos.nodePackages
列出可用的包。
$ nix-env -qaPA nixos.nodePackages | grep -i web
nixos.nodePackages.webdrvr node-webdrvr-2.43.0-1
nixos.nodePackages.webpack node-webpack-2.6.1
Run Code Online (Sandbox Code Playgroud)
如果没有您想要的软件包并且您无法制作自己的软件包,请尝试在 NixOS github上请求它。
作为替代方案,我还发现了CMCDragonkai 对 Nixpkgs 问题 #3393 的评论:
我刚刚发现您可以更改 NPM 的前缀目录。就像是:
Run Code Online (Sandbox Code Playgroud)npm config set prefix '~/mutable_node_modules.
这允许您使用 NPM 的全局安装。
因此,可以通过将其输出重定向到不受 Nix 管理的某个地方来解决纯函数模型。但我想它违背了使用 Nix 的目的。并不是每个软件都支持这些类型的配置更改。
我仍然觉得必须在
nix-env
用于普通全局 Node 包和用于开发包的 npm之间切换非常笨拙。我想这就是为什么有所有这些移植层的原因,比如“npm2nix”。
归档时间: |
|
查看次数: |
15414 次 |
最近记录: |