我正在尝试使用ReasonML编写一个命令行工具。因此,我在第一行插入了一个shebang(#! /usr/bin/env node
),但是编译器无法编译它。我该如何在编译输出中添加shebang呢?
我正在尝试使用ReasonML编写一个命令行工具。因此,我在第一行插入了一个shebang(#! /usr/bin/env node
),但是编译器无法编译它。我该如何在编译输出中添加shebang呢?
我知道有两种方法可以实现这个目标:
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 或其他一些会添加构建步骤的工具,这些工具可能并不是你所需的。