저는 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
.