Unverified Commit 9f264f69 authored by Winter's avatar Winter Committed by Lily Foster
Browse files

buildNpmPackage: use nodejs patch flag to work around roadblocks

parent dd23a120
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -6,6 +6,7 @@
      name = "npm-config-hook";
      substitutions = {
        nodeSrc = srcOnly nodejs;
        nodeGyp = "${buildPackages.nodejs}/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js";

        # Specify `diff`, `jq`, and `prefetch-npm-deps` by abspath to ensure that the user's build
        # inputs do not cause us to find the wrong binaries.
+6 −16
Original line number Diff line number Diff line
@@ -3,10 +3,15 @@
npmConfigHook() {
    echo "Executing npmConfigHook"

    # Use npm patches in the nodejs package
    export NIX_NODEJS_BUILDNPMPACKAGE=1
    export prefetchNpmDeps="@prefetchNpmDeps@"

    echo "Configuring npm"

    export HOME="$TMPDIR"
    export npm_config_nodedir="@nodeSrc@"
    export npm_config_node_gyp="@nodeGyp@"

    if [ -z "${npmDeps-}" ]; then
        echo
@@ -93,22 +98,7 @@ npmConfigHook() {

    patchShebangs node_modules

    local -r lockfileVersion="$(@jq@ .lockfileVersion package-lock.json)"

    if (( lockfileVersion < 2 )); then
      # This is required because npm consults a hidden lockfile in node_modules to figure out
      # what to create bin links for. When using an old lockfile offline, this hidden lockfile
      # contains insufficent data, making npm silently fail to create links. The hidden lockfile
      # is bypassed when any file in node_modules is newer than it. Thus, we create a file when
      # using an old lockfile, so bin links work as expected without having to downgrade Node or npm.
      touch node_modules/.meow
    fi

    npm rebuild "${npmRebuildFlags[@]}" "${npmFlags[@]}"

    if (( lockfileVersion < 2 )); then
      rm node_modules/.meow
    fi
    npm rebuild $npmRebuildFlags "${npmRebuildFlagsArray[@]}" $npmFlags "${npmFlagsArray[@]}"

    patchShebangs node_modules