如何使用webpack保持我的shebang?

Raf*_*ski 21 javascript node.js webpack

有没有办法让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;
..............................................................
Run Code Online (Sandbox Code Playgroud)

但我需要的是

#!/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;

..............................................................
Run Code Online (Sandbox Code Playgroud)

spa*_*33z 29

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

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

plugins: [
    new webpack.BannerPlugin({ banner: "#!/usr/bin/env node", raw: true }),
]
Run Code Online (Sandbox Code Playgroud)

  • 此API似乎已弃用; Webpack 2.2.1所需的行是`new webpack.BannerPlugin({banner:'#!/ usr/bin/env node',raw:true})` (6认同)
  • 完美...我不知道这个插件......它工作得很完美..只是一个关于语法的小注释(webpack 2)它的```new webpack.BannerPlugin({banner:"#!/ usr/bin/env node",raw:true});``` (4认同)

shu*_*why 5

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

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

  1. 删除源文件中的 hashbang,这会作为 webpack 语法检查错误出现。您还需要一个shebang-loaderbabel-plugin-shebang来处理源文件。

  2. 确保输出包的文件权限为“可执行”。当您在本地通过 npm 链接项目来测试 bin 文件时,这非常有用。

这些都是由webpack-shebang-plugin通过简单调用来完成的

new ShebangPlugin()
Run Code Online (Sandbox Code Playgroud)

,并且是可配置的。