NixOSでは、$ nix-env -i yarn
を実行して、通常どおりパッケージyarn
をインストールしました。現在、$ yarn start
を介してyarn
を実行しようとしています。しかし、これは私に次のエラーを引き起こします。
$ 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-env
も派生に一致しないため、$ nix-env -qa npm
を介して検索するときにnpmが使用可能とは表示されません。webpack-dev-server
をNixOSにインストールする正しい方法は何ですか?
編集
コメントリンク に従ってwebpack-dev-server
をインストールしようとしましたが、node2nix
をインストールできましたが、Readmeに記載されている手順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
次に、シェル内で 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
私のパッケージにはバイナリ依存関係がないため、これは私にとってはうまくいきます。 This 投稿では、プロジェクトの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プロファイルの依存関係(nix-envまたはnoxを介して)が「グローバル」名前空間を汚染してnixの目的を無効にするため、nix-Shellに慣れることをお勧めします。
なんらかの理由でわかりません。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
必要なパッケージがなく、自分で作成できない場合は、NixOS github でリクエストしてください。
別の方法として、Nixpkgsの問題#3393への CMCDragonkaiのコメントも見つかりました :
NPMのプレフィックスディレクトリを変更できることがわかりました。何かのようなもの:
npm config set prefix '~/mutable_node_modules.
これにより、NPMのグローバルインストールを使用できます。
したがって、出力をNixで管理されていない場所にリダイレクトすることにより、純粋に機能的なモデルを回避することができます。しかし、それはNixを使用する目的に反すると思います。また、すべてのソフトウェアがこれらのタイプの構成変更をサポートするわけではありません。
それでも、通常のグローバルNodeパッケージの
nix-env
と開発パッケージのnpmの使用を切り替える必要があるのは非常に不格好だと感じています。 「npm2nix」のような移植レイヤーがすべてあるのはそのためだと思います。