如何使用webpack保持我的shebang?

时间:2016-11-23 02:43:48

标签: 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;
..............................................................

但我需要的是

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

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

2 个答案:

答案 0 :(得分:25)

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

webpack.config.js文件中:

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

答案 1 :(得分:1)

您现在可以使用 webpack-shebang-plugin 作为一个多合一的工具集来在源条目文件中保留 hashbang。

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

  1. 删除源文件中的 hashbang,它作为 Webpack 语法检查的错误发生。您还需要一个 shebang-loader 或一个 babel-plugin-shebang 来处理源文件。

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

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

来完成的
new ShebangPlugin()

,并且是可配置的。