私はJavascriptビルド環境を持っており、最近FHS環境でビルドコマンド(yarn
この場合)をラップしました。このビルドでは、NixOSファイルシステムと互換性のない複数のバイナリ依存関係が排除されるため、FHS環境でビルドプロセス全体をラップするのが有利であるnpm
ため、これが必要です。yarn
ただし、ビルドプロセスを調整するためにYarnに渡す必要がある環境変数があります。コマンドラインにどのように渡すことができますか?
私の糸環境ファイルは次のとおりです。
{ pkgs ? import <nixos> {}
, fetchurl ? pkgs.fetchurl
, nodejs ? pkgs.nodejs
, buildFHS ? pkgs.buildFHSUserEnv
, mkDerivation ? pkgs.stdenv.mkDerivation
}:
let
version = "0.19.1";
pkgUrl = "https://github.com/yarnpkg/yarn/releases/download/v${version}/yarn-v${version}.tar.gz";
pkgSha = "751e1c0becbb2c3275f61d79ad8c4fc336e7c44c72d5296b5342a6f468526d7d";
in rec {
yarn-env = mkDerivation {
name = "yarn-env";
src = fetchurl {
url = pkgUrl;
sha256 = pkgSha;
};
phases = [ "unpackPhase" "installPhase" ];
installPhase = ''
mkdir -p $out
cp -r * $out
'';
};
yarn = buildFHS {
name = "yarn";
targetPkgs = pkgs: [ nodejs
yarn-env
pkgs.git
pkgs.stack
pkgs.haskell.compiler.ghc802
pkgs.zlib
pkgs.ncurses5
pkgs.gmp
pkgs.neovim
];
runScript = "yarn";
profile="export DEPENDENCY_BRANCH=2310-nifty-unmerged-feature";
};
}
したがって、このファイルをより大きなファイルに含めてshell.nix
Yarnコマンドを使用できるようにしました。ビルドおよびデプロイに使用する他のいくつかのコマンドもあります。
ファイルではなくコマンドラインで対応する依存関係ブランチを指定できるようにしたいですyarn-env.nix
。
答え1
nix-shell
とは、両方とを介したnix-build
パラメータ渡しをサポートします。 nix 式で評価され、文字列リテラルとして扱われます。質問に提供された式を使用すると、次の値をオーバーライドできます。--arg
--argstr
--arg
--argstr
pkgs
nix-shell -A yarn --arg pkgs 'import /home/me/nixpkgs {}'
依存ブランチを表す式に他のパラメータを追加できます。
branch ? "2310-nifty-unmerged-feature"
式でこれを参照します。
profile="export DEPENDENCY_BRANCH=${branch}";
これにより、次のいずれかの方法でコマンドラインからブランチを渡すことができます。
nix-shell --arg branch \"somebranch\"
nix-shell --argstr branch somebranch
これにより、同様の方法で外部式を調整し、パラメータを伝播させる必要がありますbranch
。
nix-shell
マニュアルページ--arg
には--argstr
。