我正在尝试用 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/