guix_mirror_bot pushed a commit to branch javascript-team in repository guix.
commit 3cd52bdb602b66fa20870b857947fae091bd39a9 Author: Jelle Licht <[email protected]> AuthorDate: Thu Oct 15 13:07:38 2026 +0200 build/node: Do not copy and hoist dependencies on install. Due to store items being read-only, have npm skip bin links and generate links to package executables in a separate phase. * guix/build/node-build-system.scm (set-home): Set npm_config_bin_links. (configure, install): Remove '--install-links'. (link-bins): New procedure. (%standard-phases): Add 'link-bins after 'build-addon, and run 'avoid-node-gyp-rebuild after it. * gnu/packages/node-xyz.scm (node-typescript)[native-inputs]: Add node-chalk. [arguments]<#:phases>: Do not delete "chalk" dependency. --- gnu/packages/node-xyz.scm | 2 +- guix/build/node-build-system.scm | 27 ++++++++++++++++++++++++--- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/gnu/packages/node-xyz.scm b/gnu/packages/node-xyz.scm index c81a97d8c0d..9f703605d22 100644 --- a/gnu/packages/node-xyz.scm +++ b/gnu/packages/node-xyz.scm @@ -4494,6 +4494,7 @@ tablets. (base32 "05w6rmlc0d2xicmp7dkjvbgz95cjkp0525qq8dfqpq5xcdy3xws6")))) (build-system node-build-system) (native-inputs (list + node-chalk node-dprint-formatter ; 0.x node-esbuild ; 0.x node-fast-xml-parser ; 4.x @@ -4532,7 +4533,6 @@ tablets. "c8" "chai" "chokidar" - "chalk" "diff" "dprint" "eslint" diff --git a/guix/build/node-build-system.scm b/guix/build/node-build-system.scm index 0e641a59432..fbe30615ecc 100644 --- a/guix/build/node-build-system.scm +++ b/guix/build/node-build-system.scm @@ -143,6 +143,7 @@ dependencies." (setenv "npm_config_fetch_retries" "0") (setenv "npm_config_audit" "false") (setenv "npm_config_ignore_scripts" "true") + (setenv "npm_config_bin_links" "false") (setenv "npm_config_offline" "true") (format #t "set HOME to ~s~%" (getenv "HOME")))))))) @@ -210,7 +211,7 @@ dependencies." (define* (configure #:key inputs #:allow-other-keys) (let ((npm (string-append (assoc-ref inputs "node") "/bin/npm"))) - (invoke npm "--install-links" "install"))) + (invoke npm "install"))) (define* (build #:key inputs #:allow-other-keys) (let* ((package-meta (call-with-input-file "package.json" json->scm)) @@ -264,9 +265,28 @@ dependencies." "--global" "--loglevel" "info" "--production" - "--install-links" "install" "../package.tgz"))) +(define* (link-bins #:key outputs #:allow-other-keys) + "Create symlinks in OUTPUT/bin as declared in package.json's bin field." + (let* ((out (assoc-ref outputs "out")) + (pkg (call-with-input-file "package.json" json->scm)) + (pkg-name (assoc-ref pkg "name")) + (pkg-dir (string-append out "/lib/node_modules/" pkg-name))) + (define (link-bin name file) + (let ((file (if (string-prefix? "./" file) + (string-drop file 2) + file))) + (mkdir-p (string-append out "/bin")) + (symlink (string-append pkg-dir "/" file) + (string-append out "/bin/" (basename name))))) + (match (assoc-ref pkg "bin") + ((? string? file) + (link-bin pkg-name file)) + (((names . files) ...) + (for-each link-bin names files)) + (#f #t)))) + (define* (build-addon #:key inputs outputs #:allow-other-keys) "Build the native addon of the installed package, as 'npm install' would when running scripts." @@ -351,7 +371,8 @@ would try to run 'node-gyp rebuild'." (add-before 'install 'repack repack) (replace 'install install) (add-after 'install 'build-addon build-addon) - (add-after 'build-addon 'avoid-node-gyp-rebuild avoid-node-gyp-rebuild))) + (add-after 'build-addon 'link-bins link-bins) + (add-after 'link-bins 'avoid-node-gyp-rebuild avoid-node-gyp-rebuild))) (define* (node-build #:key inputs (phases %standard-phases) #:allow-other-keys #:rest args)
