5

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

4

1 回答 1

6

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

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

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

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

文档

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

2. 使用rollup横幅选项:

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

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

文档

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

于 2018-03-19T06:27:09.140 回答