75 lines
1.7 KiB
Nix
75 lines
1.7 KiB
Nix
|
# This is a modified version of
|
||
|
# https://github.com/NixOS/nixpkgs/pull/128749
|
||
|
|
||
|
{ lib, stdenvNoCC, makeWrapper, nodejs }:
|
||
|
|
||
|
{ src
|
||
|
, hash ? ""
|
||
|
, runScripts ? false
|
||
|
, preferLocalBuild ? true
|
||
|
, npmFlags ? ""
|
||
|
, ...
|
||
|
} @ args:
|
||
|
stdenvNoCC.mkDerivation ({
|
||
|
inherit src preferLocalBuild;
|
||
|
|
||
|
name = "${src.name}-node_modules";
|
||
|
nativeBuildInputs = [
|
||
|
makeWrapper
|
||
|
(if args ? nodejs then args.nodejs else nodejs)
|
||
|
];
|
||
|
|
||
|
outputHashMode = "recursive";
|
||
|
|
||
|
impureEnvVars = lib.fetchers.proxyImpureEnvVars;
|
||
|
|
||
|
phases = "unpackPhase patchPhase buildPhase installPhase";
|
||
|
|
||
|
buildPhase = ''
|
||
|
runHook preBuild
|
||
|
|
||
|
if [[ ! -f package.json ]]; then
|
||
|
echo "Error: file `package.json` doesn't exist"
|
||
|
exit 1
|
||
|
fi
|
||
|
if [[ ! -f package-lock.json ]]; then
|
||
|
echo "Error: file `package-lock.json` doesn't exist"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
export SOURCE_DATE_EPOCH=1
|
||
|
export npm_config_cache=/tmp
|
||
|
NPM_FLAGS="--omit=dev --omit=optional --no-update-notifier $npmFlags"
|
||
|
# Scripts may result in non-deterministic behavior.
|
||
|
# Some packages (e.g., Puppeteer) use postinstall scripts to download extra data.
|
||
|
if [[ ! $runScripts ]]; then
|
||
|
NPM_FLAGS+=" --ignore-scripts"
|
||
|
fi
|
||
|
|
||
|
echo "Running npm ci $NPM_FLAGS"
|
||
|
npm ci $NPM_FLAGS
|
||
|
|
||
|
cp package.json \
|
||
|
package-lock.json node_modules/
|
||
|
rm -f node_modules/.package-lock.json
|
||
|
|
||
|
runHook postBuild
|
||
|
'';
|
||
|
|
||
|
installPhase = ''
|
||
|
runHook preInstall
|
||
|
|
||
|
mkdir -p $out/lib
|
||
|
cp -r node_modules $out/lib
|
||
|
|
||
|
runHook postInstall
|
||
|
'';
|
||
|
} // (
|
||
|
if hash == "" then {
|
||
|
outputHashAlgo = "sha256";
|
||
|
outputHash = "";
|
||
|
} else {
|
||
|
outputHash = hash;
|
||
|
}
|
||
|
) // (builtins.removeAttrs args [ "hash" ]))
|