Replace yarn alias with a shell script
This makes the yarn command available in Nix shell and direnv.
This commit is contained in:
@@ -1,49 +1,49 @@
|
||||
# This file is generated by running "yarn install" inside your project.
|
||||
# Manual changes might be lost - proceed with caution!
|
||||
|
||||
{ lib, nodejs, stdenv, fetchurl, writeText, git, cacert, writeShellApplication }:
|
||||
{ lib, stdenv, nodejs, git, cacert, fetchurl, writeShellScript, writeShellScriptBin }:
|
||||
{ src, overrideAttrs ? null, ... } @ args:
|
||||
|
||||
let
|
||||
|
||||
yarnPath = ./@@YARN_PATH@@;
|
||||
lockfile = ./@@LOCKFILE@@;
|
||||
cacheFolder = @@CACHE_FOLDER@@;
|
||||
#@@ IF NEED_ISOLATED_BUILD_SUPPRORT
|
||||
lockfile = ./@@LOCKFILE@@;
|
||||
#@@ ENDIF NEED_ISOLATED_BUILD_SUPPRORT
|
||||
|
||||
# Call overrideAttrs on a derivation if a function is provided.
|
||||
optionalOverride = fn: drv:
|
||||
if fn == null then drv else drv.overrideAttrs fn;
|
||||
|
||||
# Simple stub that provides the global yarn command.
|
||||
yarn = writeShellScriptBin "yarn" ''
|
||||
exec '${nodejs}/bin/node' '${./@@YARN_PATH@@}' "$@"
|
||||
'';
|
||||
|
||||
# Common attributes between Yarn derivations.
|
||||
drvCommon = {
|
||||
# Make sure the build uses the right Node.js version everywhere.
|
||||
buildInputs = [ nodejs ];
|
||||
buildInputs = [ nodejs yarn ];
|
||||
# Tell node-gyp to use the provided Node.js headers for native code builds.
|
||||
npm_config_nodedir = nodejs;
|
||||
# Tell node-pre-gyp to never fetch binaries / always build from source.
|
||||
npm_config_build_from_source = "true";
|
||||
# Defines the shell alias to run Yarn.
|
||||
postHook = ''
|
||||
yarn() {
|
||||
CI=1 node "${yarnPath}" "$@"
|
||||
}
|
||||
'';
|
||||
};
|
||||
|
||||
# Create derivations for fetching dependencies.
|
||||
cacheDrvs = let
|
||||
builder = builtins.toFile "builder.sh" ''
|
||||
builder = writeShellScript "yarn-cache-builder" ''
|
||||
source $stdenv/setup
|
||||
cd "$src"
|
||||
HOME="$TMP" yarn_cache_folder="$TMP" CI=1 \
|
||||
node '${yarnPath}' nixify fetch-one $locator
|
||||
yarn nixify fetch-one $locator
|
||||
# Because we change the cache dir, Yarn may generate a different name.
|
||||
mv "$TMP/$(sed 's/-[^-]*\.[^-]*$//' <<< "$outputFilename")"-* $out
|
||||
'';
|
||||
in lib.mapAttrs (locator: { filename, sha512 }: stdenv.mkDerivation {
|
||||
inherit src builder locator;
|
||||
name = lib.strings.sanitizeDerivationName locator;
|
||||
buildInputs = [ nodejs git cacert ];
|
||||
buildInputs = [ yarn git cacert ];
|
||||
outputFilename = filename;
|
||||
outputHashMode = "flat";
|
||||
outputHashAlgo = "sha512";
|
||||
@@ -52,7 +52,7 @@ let
|
||||
|
||||
# Create a shell snippet to copy dependencies from a list of derivations.
|
||||
mkCacheBuilderForDrvs = drvs:
|
||||
writeText "collect-cache.sh" (lib.concatMapStrings (drv: ''
|
||||
writeShellScript "collect-yarn-cache" (lib.concatMapStrings (drv: ''
|
||||
cp ${drv} '${drv.outputFilename}'
|
||||
'') drvs);
|
||||
|
||||
@@ -172,13 +172,9 @@ let
|
||||
|
||||
passthru = {
|
||||
inherit nodejs;
|
||||
yarn = writeShellApplication {
|
||||
name = "yarn";
|
||||
runtimeInputs = [ nodejs ];
|
||||
text = ''
|
||||
${yarnPath} --cwd ${project}/libexec/${project.name} "$@"
|
||||
'';
|
||||
};
|
||||
yarn = writeShellScriptBin "yarn" ''
|
||||
exec '${yarn}/bin/yarn' --cwd '${project}/libexec/${project.name}' "$@"
|
||||
'';
|
||||
};
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user