【问题标题】:How do I invoke deno from a shell script?如何从 shell 脚本调用 deno?
【发布时间】:2020-11-12 13:40:46
【问题描述】:

我有一个我想运行的脚本...可能是这样的:

#!/usr/bin/env deno

console.log('hello world');

shebang 部分令人困惑。当我按照上述方式进行操作时,使用文件名dev,我得到:

error: Found argument './dev' which wasn't expected, or isn't valid in this context

当我尝试将 shebang 更改为 #!/usr/bin/env deno run

我明白了

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

有什么想法可以解决这个问题吗?

【问题讨论】:

标签: shell deno


【解决方案1】:

为了通过env 将命令选项传递给deno,您需要环境的-S 参数。

例如,以下是使用 Deno 自行运行脚本时应使用的最小 shebang。

#!/usr/bin/env -S deno run

复杂示例:

以下脚本/shebang 将尽可能以静默方式运行 Deno,并具有所有权限,并假定脚本文件旁边有一个 import_map.json 文件。

#!/usr/bin/env -S deno -q run --allow-all --import-map="${_}/../import_map.json"

// get file and directory name
const __filename = import.meta.url.replace("file://", "");
const __dirname = __filename.split("/").slice(0, -1).join("/");

带有__filename__dirname 的行将为您提供类似于Node 执行的变量。


脚本安装程序

Deno 还提供了一种方便的方法,用于在配置的分发位置安装脚本及其权限和依赖项。

见:Deno Manual - Script installer

独立可执行文件

从 Deno 1.6 开始,您现在也可以从脚本构建独立的可执行文件。

见:Deno Manual - Compiler - Compiling Executables

【讨论】:

  • 是的,我明白这一点。我正在尝试使用 deno / javascript 编写 shell 脚本。当我运行该安装时,它只会生成一个调用 deno 运行的 shell 脚本。是否可以在 shell 脚本中本地执行此操作?
  • @RandallB - 感谢您澄清您已经知道 deno install。我更新了我的答案。
  • 如果我没有-S 选项怎么办?
  • @Sean then it won't work...使用/usr/bin/envdeno run作为命令,你必须在shebang线上有-S。我用一个更复杂的例子和一个最小的例子更新了答案。
【解决方案2】:

德诺 1.6.0

可以编译成独立的二进制/可执行文件,不需要自定义Shebang:

$ deno compile --unstable main.js 
# or add custom output path
$ deno compile --unstable main.js -o /my/path/main
# both create ./main executable (e.g. on Linux)

# execute script directly
$ ./main 

更多信息

【讨论】:

  • 当你提供应该是开源的 Deno 脚本(如公共存储库中的帮助脚本)时,肯定需要使用自定义 Shebang,而不是编译。
猜你喜欢
  • 2012-01-11
  • 2018-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-22
  • 2014-06-05
  • 2018-03-25
  • 2021-06-03
相关资源
最近更新 更多