ReasonML中的Shebang支持

5

我正在尝试使用ReasonML编写一个命令行工具。因此,我在第一行插入了一个shebang(#! /usr/bin/env node),但是编译器无法编译它。我该如何在编译输出中添加shebang呢?


你能编译成本地代码而不是JS吗?如果是CLI,有很好的OCaml库可以在Reason中轻松重用,例如https://github.com/janestreet/shexp。 - Yawar
1个回答

6

我知道有两种方法可以实现这个目标:

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

以下是一个示例,它使用 sed 将 shebang 插入生成的 js 文件的顶部:

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

文档

这个操作只会执行实际需要执行的文件。不过,问题在于 shebang 不是有效的javascript代码。如果你需要之后解析它并打包,可能会失败(比如rollup)。BSB 表现也会有点奇怪,不过我没有遇到过严重的问题,只是构建触发了几百次。

2. 使用 rollup 的 banner 选项:

Webpack 和其他打包工具可能也有类似功能,但我只知道怎样使用 rollup。以下是一个 rollup.config.js 配置的例子:

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

文档

这样做的缺点显而易见,那就是你必须要使用 rollup 或其他一些会添加构建步骤的工具,这些工具可能并不是你所需的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接