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

npm: Not working with bun without node #688

Closed
cethien opened this issue Apr 1, 2024 · 14 comments
Closed

npm: Not working with bun without node #688

cethien opened this issue Apr 1, 2024 · 14 comments
Labels
bug Something isn't working

Comments

@cethien
Copy link

cethien commented Apr 1, 2024

🔧 Summary

seems like the tool doesn't work without node. i have only bun for js on my system.
after lefthook install, every hooked git actions results in /usr/bin/env: ‘node’: No such file or directory

Lefthook version

1.6.7 599459e

Steps to reproduce

curl -fsSL https://bun.sh/install | bash
cd <repo>
bun add -D lefthook
<define any lefthook action, eg. commitlint>
lefthook install
git add . && git commit -m "hello"

Expected results

commitlint error

Actual results

/usr/bin/env: ‘node’: No such file or directory

Logs / Screenshots

+ '[' '' = 0 ']'
+ call_lefthook run prepare-commit-msg .git/COMMIT_EDITMSG message
++ git rev-parse --show-toplevel
+ dir=<userprofile>/source/posh-nv
++ uname
++ tr '[:upper:]' '[:lower:]'
+ osArch=mingw64_nt-10.0-22631
++ uname -m
++ sed s/aarch64/arm64/
+ cpuArch=x86_64
+ test -n ''
+ lefthook.exe -h
+ lefthook.bat -h
+ test -f <userprofile>/source/posh-nv/node_modules/lefthook/bin/index.js
+ <userprofile>source/posh-nv/node_modules/lefthook/bin/index.js run prepare-commit-msg .git/COMMIT_EDITMSG message     
/usr/bin/env: ‘node’: No such file or directory
@cethien cethien added the bug Something isn't working label Apr 1, 2024
@mrexox
Copy link
Member

mrexox commented Apr 2, 2024

Hey! Thank you for creating an issue. Do you have an idea of how an executable script could be run with either nodejs or bun? I can think of a statically built executable (probably with bun) but I have concerns. It would be great to know if there's a common solution for such cases. I will investigate

@cethien
Copy link
Author

cethien commented Apr 2, 2024

bun is intended as a node replacement, so just calling a script.js file should work fine.

It would be great to know if there's a common solution for such cases. I will investigate

i will check out some stuff and give a comment

@dalisoft
Copy link
Contributor

@mrexox @cethien #705 maybe fixes this case as removes require of Node.js and #!/usr/bin/env node

@Blaquewithaq
Copy link

Blaquewithaq commented Apr 22, 2024

For those of you, that want to utilize this package with bun now, Ive figured out a quick patch solution until bun support has been officially added.

Add these to your package.json file and you'll be good to go.

"prepare:lefthook": "lefthook install && bun -e \"const fs=require('node:fs'); fs.writeFileSync('node_modules/lefthook/bin/index.js', fs.readFileSync('node_modules/lefthook/bin/index.js', 'utf8').replace(/^#!\\/usr\\/bin\\/env\\s+node/gm, '#!/usr/bin/env bun'))\"",
"postinstall": "bun prepare:lefthook"

@dy0gu
Copy link

dy0gu commented Jun 30, 2024

@Blaquewithaq, thanks for the temporary fix!

Any news on if @dalisoft's PR removes the node dependency to allow runtime independence? Using the above solution is a whole lot of verbose that would be amazing to clear up.

Like @cethien said, Bun is a node runtime replacement, we could simply run any script.js using either Node or Bun depending on the first that passes, since the result will be runtime independent once converted to git hooks.

@cethien
Copy link
Author

cethien commented Jul 2, 2024

since I opened the issue, I was experimenting around a bit and noticed something:

when installing other tools like esbuild, there is no js script that executes the binary, only a script to install for the right OS.
the root cause for my problem seems to be the js script that runs the binary - is it possible to ditch the index.js alltogether?

@mrexox
Copy link
Member

mrexox commented Jul 3, 2024

I hope so, I have @dalisoft's PR on my radar, I just need to test it to make sure it solves the issue with bun.

@dy0gu
Copy link

dy0gu commented Jul 27, 2024

I hope so, I have @dalisoft's PR on my radar, I just need to test it to make sure it solves the issue with bun.

Hey @mrexox, it seems you have merged the PR you referred to here, do you have any updates on this issue? Can it be closed, or are there any extra steps that need to be taken?

@mrexox
Copy link
Member

mrexox commented Jul 29, 2024

Hey! Unfortunately there was a backward compatibility issue with the PR, I am going to try a slightly different approach and will notify ASAP.

@mrexox
Copy link
Member

mrexox commented Jul 31, 2024

@cethien could you please check if the newest lefthook version works? I've changed the order of checks in the hook template and it must not fail with /usr/bin/env: ‘node’: No such file or directory

@cethien
Copy link
Author

cethien commented Aug 5, 2024

@cethien could you please check if the newest lefthook version works? I've changed the order of checks in the hook template and it must not fail with /usr/bin/env: ‘node’: No such file or directory

hey, only managed to test now

I removed node from my system, and tested this one:

.lefthook.yml

# yaml-language-server: $schema=https://json.schemastore.org/lefthook.json
# vim: set ts=2 sw=2 tw=0 fo=cnqoj

commit-msg:
  parallel: true
  commands:
    commitlint:
      run: bun commitlint --edit $1

it seemed to work, my commit was some gibberish and i got a commitlint error.

@cethien
Copy link
Author

cethien commented Aug 18, 2024

seems to be resolved

@cethien cethien closed this as completed Aug 18, 2024
@sjiamnocna
Copy link

Hello again.
Time to time I try to move my Dockerfile from node:alpine to bun:alpine. But it failed with "env: can't execute 'node': No such file or directory".

So I've done
docker run -it oven/bun:alpine sh
$: bun i -g @localazy/cli
The result is the same and I found this bug:

env: can't execute 'node': No such file or directory

What should I do to run the Next app with all deps in Bun:alpine container correctly?

@mrexox
Copy link
Member

mrexox commented Nov 7, 2024

Right now there is no way to do this other than installing lefthook from a different source (e.g. alpine registry). This is because postinstall hook of the npm package requires node

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

6 participants