volta-cli / volta

Volta: JS Toolchains as Code. ⚡
https://volta.sh
Other
10.86k stars 227 forks source link

Could not find the sentinel NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 in the binary #1594

Open Drjacky opened 8 months ago

Drjacky commented 8 months ago

I followed these steps to build a single executable application: https://nodejs.org/api/single-executable-applications.html but when I run

npx postject hello NODE_SEA_BLOB sea-prep.blob \
    --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 \
    --macho-segment-name NODE_SEA 

I get

Start injection of NODE_SEA_BLOB in hello...
Error: Could not find the sentinel NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 in the binary

Is the node in Volta identical to the official node? Does it support "Single executable applications"?

chriskrycho commented 8 months ago

Volta’s Node is actually just pulled straight from the Node CDN. I do not know why it wouldn’t support this. However, the node actually invoked initially on the CLI is Volta’s “shim”, which intercepts that and redirects it to the correct version for you. It is possible that the postject tool is trying to work directly with the file it finds on the path, in which case that would break. (That would also affect other tools which use “shims”, which is several of them, not just Volta!)

Drjacky commented 8 months ago

You might be right as when I ran the command by using the node directly:

/opt/homebrew/lib/node_modules/npm/bin/npx postject hello NODE_SEA_BLOB sea-prep.blob \
    --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 \
    --macho-segment-name NODE_SEA
node:internal/modules/cjs/loader:1147
  throw err;
  ^

Error: Cannot find module '/Users/usernameee/volta/tools/image/node/21.3.0/bin/node_modules/npm/bin/npm-cli.js'
    at Module._resolveFilename (node:internal/modules/cjs/loader:1144:15)
    at Module._load (node:internal/modules/cjs/loader:985:27)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:135:12)
    at node:internal/main/run_main_module:28:49 {
  code: 'MODULE_NOT_FOUND',
  requireStack: []
}

Node.js v21.3.0
Could not determine Node.js install directory
Drjacky commented 8 months ago

A side question:

Volta’s Node is actually just pulled straight from the Node CDN

is this the same for Yarn as well? cause the latest Yarn is 1.22.21 but volta shows Yarn: v3.6.0-git.20230603.hash-3c8237cb (default)

chriskrycho commented 8 months ago

The latest Yarn is not 1.x but 3.x. The difference is how it is distributed since Yarn v2 I believe!

steven-zhc commented 7 months ago

I got the same issue and this is what I did for workaround:

cp $(volta which node) hello
npx postject hello NODE_SEA_BLOB sea-prep.blob \
    --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 \
    --macho-segment-name NODE_SEA