79 lines
2.3 KiB
Bash
79 lines
2.3 KiB
Bash
# shellcheck shell=bash
|
|
|
|
yarnInstallHook() {
|
|
echo "Executing yarnInstallHook"
|
|
|
|
runHook preInstall
|
|
|
|
local -r packageOut="$out/lib/node_modules/$(@jq@ --raw-output '.name' ./package.json)"
|
|
mkdir -p "$packageOut"
|
|
|
|
local -ar yarnArgs=(
|
|
--ignore-engines
|
|
--ignore-platform
|
|
--ignore-scripts
|
|
--no-progress
|
|
--non-interactive
|
|
--offline
|
|
)
|
|
|
|
local -r tmpDir="$(mktemp -d)"
|
|
|
|
# yarn pack does not work at all with bundleDependencies.
|
|
# Since we are imediately unpacking, we can just remove them from package.json
|
|
# This will NOT be fixed in yarn v1: https://github.com/yarnpkg/yarn/issues/6794
|
|
mv ./package.json "$tmpDir/package.json.orig"
|
|
# Note: two spellings are accepted, 'bundleDependencies' and 'bundledDependencies'
|
|
@jq@ 'del(.bundleDependencies)|del(.bundledDependencies)' "$tmpDir/package.json.orig" > ./package.json
|
|
|
|
# TODO: figure out a way to avoid redundant compress/decompress steps
|
|
yarn pack \
|
|
--filename "$tmpDir/yarn-pack.tgz" \
|
|
"${yarnArgs[@]}"
|
|
|
|
tar xzf "$tmpDir/yarn-pack.tgz" \
|
|
-C "$packageOut" \
|
|
--strip-components 1 \
|
|
package/
|
|
|
|
mv "$tmpDir/package.json.orig" ./package.json
|
|
|
|
nodejsInstallExecutables ./package.json
|
|
|
|
nodejsInstallManuals ./package.json
|
|
|
|
local -r nodeModulesPath="$packageOut/node_modules"
|
|
|
|
if [ ! -d "$nodeModulesPath" ]; then
|
|
if [ -z "${yarnKeepDevDeps-}" ]; then
|
|
# Yarn has a 'prune' command, but it's only a stub that directs you to use install
|
|
if ! yarn install \
|
|
--frozen-lockfile \
|
|
--force \
|
|
--production=true \
|
|
"${yarnArgs[@]}"
|
|
then
|
|
echo
|
|
echo
|
|
echo "ERROR: yarn prune step failed"
|
|
echo
|
|
echo 'If yarn tried to download additional dependencies above, try setting `yarnKeepDevDeps = true`.'
|
|
echo
|
|
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
find node_modules -maxdepth 1 -type d -empty -delete
|
|
|
|
cp -r node_modules "$nodeModulesPath"
|
|
fi
|
|
|
|
runHook postInstall
|
|
|
|
echo "Finished yarnInstallHook"
|
|
}
|
|
|
|
if [ -z "${dontYarnInstall-}" ] && [ -z "${installPhase-}" ]; then
|
|
installPhase=yarnInstallHook
|
|
fi
|