reasonML 中的 Shebang 支持

标签 shebang reason bucklescript

我正在尝试用 reasonML 编写一个命令行工具。所以我在第一行插入了一个shebang(#! /usr/bin/env node),但是编译器编译失败。如何在编译输出中添加shebang?

最佳答案

我知道有两种方法可以做到这一点:

1. 使用 js-post-build bsconfig.json 中的配置选项:

这是一个使用 sed 的示例在生成的 js 文件的顶部插入 shebang:

"js-post-build": {
  "cmd": "/usr/bin/sed -i '1 i\\#!/usr/bin/env node'"
}

Documentation

这将仅对实际执行的文件执行。这样做的缺点是 shebang 不是有效的 javascript,因此如果您需要稍后解析它,例如捆绑,它可能会失败(例如汇总)。 BSB 的行为也会有点小问题,但我没有遇到严重的问题,只是来自构建的一些控制台垃圾邮件触发了比应有的多几百倍。

2.使用rollup s 横幅选项:

Webpack 和其他打包器可能有类似的功能,但我只知道如何使用 rollup 来做到这一点。这是一个例子 rollup.config.js配置:

export default {
  input: `src/main.bs.js`,
  output: {
    file: `bin/main.js`,
    format: 'cjs',
    banner: '#!/usr/bin/env node'
  }
}

Documentation

这样做的缺点当然是您必须使用汇总或其他一些工具来添加您可能不需要的构建步骤。

关于reasonML 中的 Shebang 支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49355414/

相关文章:

ocaml - ReScript 中的无限列表/流

unicode - 如何使用 ReasonReact 显示表情符号?

module - ReasonML 循环依赖

python - 在/usr/local/bin/中执行 python shebang 脚本时没有任何反应

OOP-如何在ReasonML中创建一个类

ocaml - 如何为联合类型编写 reasonml 绑定(bind)

promise - 在 ReasonML 中从 Js.Promise 转换为 `reason-promise`

node.js - 如何使用 ssh 远程运行(shebang 前缀) Node 脚本?

c++ - 如何将 "shebang"文件的内容提供给它调用的程序?

macos - Bash shebang 被忽略 - 脚本仍然使用 zsh 执行