Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Build fails when using --no-bin-links #79

Open
JamesXNelson opened this issue Oct 22, 2024 · 4 comments
Open

Build fails when using --no-bin-links #79

JamesXNelson opened this issue Oct 22, 2024 · 4 comments

Comments

@JamesXNelson
Copy link

Hi there.

We have a private enterprise repo where we have to use --no-bin-links due to how our CI caching layer works (bin links can lead to hanging symlinks that blow up on us).

When running npm i, everything is happy. Adding --no-bin-links, and we get traces like so:

6299 verbose reify failed optional dependency /dh/ws2/iris/web/client-ui/node_modules/msgpackr-extract
6300 silly reify mark deleted [
6300 silly reify   '/dh/ws2/iris/web/client-ui/node_modules/msgpackr-extract',
6300 silly reify   '/dh/ws2/iris/web/client-ui/node_modules/.bin/download-msgpackr-prebuilds'
6300 silly reify ]
6301 verbose reify failed optional dependency /dh/ws2/iris/web/client-ui/node_modules/node-gyp-build-optional-packages
6302 silly reify mark deleted [
6302 silly reify   '/dh/ws2/iris/web/client-ui/node_modules/node-gyp-build-optional-packages',
6302 silly reify   '/dh/ws2/iris/web/client-ui/node_modules/.bin/node-gyp-build-optional-packages',
6302 silly reify   '/dh/ws2/iris/web/client-ui/node_modules/.bin/node-gyp-build-optional-packages-optional',
6302 silly reify   '/dh/ws2/iris/web/client-ui/node_modules/.bin/node-gyp-build-optional-packages-test'
6302 silly reify ]
6303 verbose reify failed optional dependency /dh/ws2/iris/web/client-ui/node_modules/node-gyp-build-optional-packages/node_modules/detect-libc
6304 silly reify mark deleted [
6304 silly reify   '/dh/ws2/iris/web/client-ui/node_modules/node-gyp-build-optional-packages/node_modules/detect-libc'
6304 silly reify ]
6305 timing build:run:install:node_modules/msgpackr-extract Completed in 36ms
6306 info run [email protected] install { code: 127, signal: null }
6307 timing reify:rollback:createSparse Completed in 1144ms
6308 timing reify:rollback:retireShallow Completed in 0ms
6309 timing command:i Completed in 28387ms
6310 verbose stack Error: command failed
6310 verbose stack     at ChildProcess.<anonymous> (/home/james/.nvm/versions/node/v20.13.1/lib/node_modules/npm/node_modules/@npmcli/promise-spawn/lib/index.js:53:27)
6310 verbose stack     at ChildProcess.emit (node:events:519:28)
6310 verbose stack     at maybeClose (node:internal/child_process:1105:16)
6310 verbose stack     at Socket.<anonymous> (node:internal/child_process:457:11)
6310 verbose stack     at Socket.emit (node:events:519:28)
6310 verbose stack     at Pipe.<anonymous> (node:net:338:12)
6311 verbose pkgid [email protected]
6312 verbose cwd /dh/ws2/iris/web/client-ui
6313 verbose Linux 6.8.0-40-generic
6314 verbose node v20.13.1
6315 verbose npm  v10.5.2
6316 error code 127
6317 error path /dh/ws2/iris/web/client-ui/node_modules/lmdb
6318 error command failed
6319 error command sh -c node-gyp-build-optional-packages
6320 error sh: 1: node-gyp-build-optional-packages: not found

sorry if there's some additional debugging info that should be provided; I do general devops, and am helping our web team fix this build error ("it works on my machine, but dies in CI [because we enforce --no-bin-links in CI]").

@JamesXNelson
Copy link
Author

fwiw, adding --ignore-scripts has enabled us to move past this, but I really dislike arbitrarily disabling things I don't really understand in order to workaround a problem.

@vweevers
Copy link
Member

In the case of node-gyp-build (or the node-gyp-build-optional-packages fork that lmdb employs) it is safe to use --ignore-scripts if a prebuilt binary is available for the platform that you're running on (assuming you have no other reason to compile it yourself). The script checks if a compatible prebuild exists, and if not, falls back to compiling the addon (lmdb).

@JamesXNelson
Copy link
Author

ok. I was trying to avoid --ignore-scripts in case something else needed it, but our build seems to be fine w/ this disabled.

I think perhaps some additional testing around --no-bin-links so that is doesn't try to sh node-gyp-build when it's not on the PATH may help others in the future.

@vweevers
Copy link
Member

IMO use of --no-bin-links is at your own risk, because it's an essential feature for npm scripts. There is no alternative that has the same level of convenience.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants