javascript - 如何在不破坏浏览器支持的情况下将 hashbang 添加到可执行的 Javascript 文件?
问题描述
是否有可能有这样的代码:
#! /usr/local/bin/node
console.log("Hello world")
那我也可以在浏览器中运行?
我有一个脚本,我在本地运行并想在浏览器中运行它,但现在我需要为浏览器目标“重新编译”它,只是为了删除 hashbang 行。
我想不出办法。有任何想法吗?
编辑:我的用途是我不想拥有 2 个文件,因为我希望能够在处理当前文件时执行它,并通过网络提供它。我认为解决方案是要么为浏览器编译它到第二个文件,要么使用 #! 与 javascript 配合得很好。
解决方案
如果您只使用过 bash,则可以利用 bash 的一项功能(?!):bash 使用 bash 执行脚本而无需 shebang。其他外壳程序可能会将其留给通常使用的操作系统/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
将文件的其余部分提供给节点,然后退出:
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。///
路径开头的 不应该引起问题 - 路径开头的三个或更多等同/
于单个/
.
但我强烈建议您改用包装脚本,正如评论所建议的那样。
推荐阅读
- salesforce - 如何删除 Salesforce Commerce Cloud 墨盒?
- sql - 当某个字符串出现 n 次时从数据库中删除
- python - Tkinter:来自条目的泡菜数据
- node.js - 我可以从我的 NodeJS 应用程序动态创建 RabbitMQ 铲子吗?
- bash - 不打算转义的 GNU 并行转义字符
- javascript - JavaScript 中有值索引集合吗?
- c - 理解 C 中的联合
- firebase - Flutter (Dart>=2.0) 与 OrientDB
- android - Google Play 商店中不支持的设备 - Flutter
- c# - 如何投影 Mongo LINQ 查询以仅从文档返回子对象?