gpt4 book ai didi

javascript - 如何在不破坏浏览器支持的情况下将 hashbang 添加到可执行的 Javascript 文件?

转载 作者:行者123 更新时间:2023-11-30 19:31:45 24 4
gpt4 key购买 nike

是否可以有这样的代码:

#! /usr/local/bin/node
console.log("Hello world")

我也可以在浏览器中运行吗?

我有一个在本地运行的脚本,想在浏览器中运行它,但现在我需要为浏览器目标“重新编译”它,只是为了删除 hashbang 行。

我想不出解决办法。有什么想法吗?

编辑:我的用途是我不想拥有 2 个文件,因为我希望能够在处理当前文件的同时执行它,并通过网络提供它。我认为解决方案必须是为浏览器将其编译为第二个文件或使用 #!这与 javascript 配合得很好。

最佳答案

如果您只使用 bash,您可以利用 bash 的一项功能(?!):bash executes scripts without a shebang using bash .其他 shell 可能会将其留给操作系统,操作系统通常会使用 /bin/sh 代替。例如:

bash-5.0$ echo 'echo $1 $BASH_VERSION' > foo.sh
bash-5.0$ for sh in sh bash dash ksh zsh; do $sh -c "./foo.sh $sh"; done
sh 3.2.57(1)-release
bash 5.0.7(1)-release
dash 3.2.57(1)-release
ksh
zsh 3.2.57(1)-release

(/bin/sh 是 macOS 上旧版本 bash 的链接。)

所以,你可以有这样一个文件:

///usr/local/bin/node <(tail -n +1 "$0"); exit $?
console.log("Hello world")

如果您在浏览器或其他运行 JavaScript 的方式中运行它,则第一行应该作为注释被忽略。

如果您在 bash 中将其作为脚本运行,第一行告诉它运行 ///usr/local/bin/node,使用带有 tail 的进程替换将文件的其余部分提供给 Node ,然后退出:

bash-5.0$ cat foo.js
///usr/local/bin/node <(tail -n +1 "$0"); exit $?
console.log("Hello world")
bash-5.0$ ./foo.js
Hello world

这个技巧也适用于 ksh。路径开头的 /// 不应引起问题 - 路径开头的三个或更多 / 等同于单个 /.

但我强烈建议您按照评论中的建议改用包装脚本。

关于javascript - 如何在不破坏浏览器支持的情况下将 hashbang 添加到可执行的 Javascript 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56353088/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com