我希望自动化构建一个包含前端和后端的应用程序。为此,我想使用 Maven 和 Ant 进行平台无关的复制和 CLI 任务。对于一些 CLI 如 docker ...
,这是可行的。但对于由 npm
提供的 CLI 或 npm
本身则不行。
<exec executable="docker">
<arg line="version"/>
</exec>
<!--Works-->
<exec executable="C:\Program Files\nodejs\npm.cmd">
<arg line="version"/>
</exec>
<!--Doesn't work-->
<exec executable="npm">
<arg line="version"/>
</exec>
如第二个例子所示,如果我指定npm.cmd的完整路径,脚本就可以工作。但这应该至少在windows和unix上工作。因此,指定完整路径不是一个选择。
有没有办法从ant运行npm及其模块?
晚些编辑:
真正的问题是,windows节点安装程序也将名为npm的文件放置在bin文件夹中,这是一个针对cygwin的bash脚本。npm bin文件夹已添加到全局PATH环境变量中,Windows cmd会选择正确的二进制文件,因为它使用PATHEXT环境变量来确定什么可执行,什么不可执行。ant exec插件不使用PATHEXT,只执行命名为npm的第一个文件,这将导致失败。解决方案是将路径中的纯npm文件重命名。这样,ant首先看到npm.cmd文件,一切都顺利进行。