我目前正在编写节点CLI工具,并使用webpack捆绑我的所有资产。该应用程序的入口点是js文件,我实际上在其中解析process.argv并运行命令(供参考,我使用的是tj / commander)。这样,一旦捆绑完成,我就可以输入./<outputFile>,它将运行我的应用程序。入口文件如下所示:
import cli from './cli';
cli.parse(process.argv);
// If nothing was supplied
if (!process.argv.slice(2).length) {
cli.outputHelp();
}
Run Code Online (Sandbox Code Playgroud)
捆绑工作正常,但我无法通过webpack将文件输出为可执行文件。一旦我跑步chmod +x <outputFile>,一切都会正常进行。有没有一种方法可以告诉webpack授予输出文件什么权限?
我很惊讶没有人对 webpack 的BannerPlugin. 我做了一些与@oklas类似的事情,但BannerPlugin用于添加特定节点 shebang:
{
plugins: [
new webpack.BannerPlugin({
banner: '#!/usr/bin/env node',
raw: true,
}),
],
}
Run Code Online (Sandbox Code Playgroud)
然后我只需将执行权限添加chmod到我的package.json文件中:
"scripts": {
"build": "webpack && chmod +x dist/mycommand"
}
Run Code Online (Sandbox Code Playgroud)
无论如何,如果您只想使用 webpack,您可以使用WebpackShellPlugin,正如 oklas 所说(请注意,使用它会强制您添加新的依赖项,这就是我避免使用这种方法的原因):
const WebpackShellPlugin = require('webpack-shell-plugin')
{
// [...]
plugins: [
new WebpackShellPlugin({
onBuildEnd:['chmod +x dist/mycommand'],
}),
],
}
Run Code Online (Sandbox Code Playgroud)
如果你想避免包含WebpackShellPlugin作为依赖,你可以尝试定义一个基于 的自定义插件fs,如@taylorc93所说
一种简单的方法是使用npm。你有一个package.json在你的项目?添加"build": "webpack && chmod +x outputFile"到scripts您的部分,package.json然后通过运行构建项目npm run build。
另一种方法是将以下解决方案之一添加到您的webpack.config.js:
这个答案的简单插件,具有pre和post构建处理程序
使用on-build-webpack插件,该插件在webpack构建过程结束时执行js代码
无论选择什么,都需要添加以下代码:
var chmod = require('chmod');
chmod("outputFile", 500);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2325 次 |
| 最近记录: |