如何使用 webpack 保持我的 shebang 到位?

Posted

技术标签:

【中文标题】如何使用 webpack 保持我的 shebang 到位?【英文标题】:How to keep my shebang in place using webpack? 【发布时间】:2017-04-06 21:54:28 【问题描述】:

有没有办法让 Webpack 将 #!/usr/bin/env node 保留在我的文件顶部?

我正在尝试将 CLI 与模块捆绑在一起...仅使用一个配置文件单独导出我的 index.js / cli.js 有点棘手...并使 cli 需要索引...我明白了工作...

但是.. 我没有找到任何方法将#!/usr/bin/env node 保留在我的 cli 文件顶部,有什么想法吗?

简而言之,webpack 会输出这样的文件:

/******/ (function(modules)  // webpackBootstrap
/******/    // The module cache
/******/    var installedModules = ;

/******/    // The require function
/******/    function __webpack_require__(moduleId) 

/******/        // Check if module is in cache
/******/        if(installedModules[moduleId])
/******/            return installedModules[moduleId].exports;
..............................................................

但我需要的是

#!/usr/bin/env node //<------ HEREEEE

/******/ (function(modules)  // webpackBootstrap
/******/    // The module cache
/******/    var installedModules = ;

/******/    // The require function
/******/    function __webpack_require__(moduleId) 

/******/        // Check if module is in cache
/******/        if(installedModules[moduleId])
/******/            return installedModules[moduleId].exports;

..............................................................

【问题讨论】:

嗨,Raf,在完成需要出口的事情上做得很好。现在你为什么认为 webpack 正在移除 shebang?给我们看一些代码。 #!/usr/bin/env node 用作node cli.js 的快捷方式,因此我可以调用我的脚本,就好像它是命令行上的二进制文件一样......但是 webpack 引导程序清理了所有内容......它需要第一行包含#!/usr/bin/env node 否则它将无法工作... 【参考方案1】:

您应该可以将BannerPlugin 与原始模式一起使用。使用此插件,您可以在捆绑包顶部添加所需的任何字符串。通过使用原始模式,它不会将字符串包装在注释中。

在您的webpack.config.js 文件中:

plugins: [
    new webpack.BannerPlugin( banner: "#!/usr/bin/env node", raw: true ),
]

【讨论】:

【参考方案2】:

您现在可以将 webpack-shebang-plugin 用作一体化工具集,将 hashbang 保留在源条目文件中。

BannerPlugin 仅将 hashbang 附加到您的输出包中,但它不会

    删除源文件中的 hashbang,这是 webpack 语法检查的错误。您还需要shebang-loader 或babel-plugin-shebang 来处理源文件。

    确保您的输出包的文件权限为“可执行”。当您在本地 npm-link 项目以测试 bin 文件时,这很有用。

这些都是由 webpack-shebang-plugin 完成的,只需调用

new ShebangPlugin()

,并且是可配置的。

【讨论】:

以上是关于如何使用 webpack 保持我的 shebang 到位?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Shebang Line (Python 虚拟环境)

如何使用 Shebang Line (Python 虚拟环境)

如何使用带有 shebang 的 awk 的多个参数(即#!)?

Python脚本的正确shebang

如何从 OSX Swift 命令行工具或 shebang 脚本文件显示窗口?

使用#!/ usr / bin / env python3 shebang和Windows