2016-11-23 93 views
9

有没有什么办法可以让Webpack将#!/usr/bin/env node保存在我的文件顶部?如何使用webpack保留我的shebang?

我试图捆绑一个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; 

.............................................................. 
+0

嗨拉夫,在获取了伟大的工作,出口需要的东西去。现在你为什么认为webpack将删除shebang?向我们展示一些代码。 –

+0

'#!/ usr/bin/env节点'用作'node cli.js'的快捷方式,所以我可以调用我的脚本,就好像它是命令行上的二进制文件一样...但是webpack bootstrap清理所有内容...它需要第一行包含'#!/ usr/bin/env节点',否则它不会工作... –

回答

11

你应该能够使用BannerPlugin与原始模式这一点。有了这个插件,你可以在你的包的顶部添加你想要的任何字符串。通过使用原始模式,它不会将字符串包装在注释中。

在你webpack.config.js文件:

plugins: [ 
    new webpack.BannerPlugin('#!/usr/bin/env node', { raw: true }); 
] 
+3

完美...我不知道这个插件...它的工作完美..只是一个关于语法(webpack 2)的小记录,它的'''新的webpack.BannerPlugin({banner:“#!/ usr/bin/env节点,raw:true});''' –

+0

好!现场学习:-D –

+3

此API似乎已被弃用; Webpack 2.2.1所需的行是'new webpack.BannerPlugin({banner:'#!/ usr/bin/env node',raw:true})' – LINKIWI