我想自动使用前端和后端的应用程序构建。为此,我想将Maven与ANT一起用于平台独立副本和CLI任务。有了一些docker ...
的CLI,这起作用。但这对于npm
或npm
本身提供的CLI不起作用。
<exec executable="docker">
<arg line="version"/>
</exec>
<!--Works-->
<exec executable="C:Program Filesnodejsnpm.cmd">
<arg line="version"/>
</exec>
<!--Doesn't work-->
<exec executable="npm">
<arg line="version"/>
</exec>
如第二个示例所示,如果我指定了NPM.CMD的完整路径,则该脚本可以工作。但这至少应该在Windows和Unix上使用。因此,指定完整路径不是一个选项。
有什么方法可以运行npm
及其模块来自ANT?
晚期编辑:
真正的问题是,Windows节点安装程序还将一个名为npm
的文件放入bin文件夹中,该文件是用于Cygwin的bash脚本。NPM bin文件夹已添加到"全局" PATH
env var中,并且Windows CMD确实选择了正确的二进制文件,因为它使用PATHEXT
env var来确定什么是可执行文件,什么不是。Ant Exec插件不使用PATHEXT
,而仅执行第一个名为npm
失败的文件。解决方案是在路径中重命名普通npm
文件。这样,蚂蚁首先看到 npm.cmd
文件,一切顺利运行。
我知道这是旧的,但这就是我将来的东西。在我们的Mac,Unix和Windows Box中工作。
<macrodef name="exec-node">
<attribute name="module" description="The name of the NodeJS module to execute" />
<attribute name="failonerror" default="true" description="Fail if the exit code is not 0" />
<attribute name="dir" description="Directory to execute task" />
<element name="args" implicit="yes" description="Argument to pass to the exec task" />
<sequential>
<exec executable="cmd.exe" dir="@{dir}" failonerror="@{failonerror}" osfamily="winnt">
<arg line="/c @{module}" />
<args />
</exec>
<exec executable="@{module}" dir="@{dir}" failonerror="@{failonerror}" osfamily="unix" logError="true">
<args />
</exec>
</sequential>
</macrodef>
那么这样的事情可以起作用
<exec-node dir="${node.project.dir}" module="npm" failonerror="true" >
<arg value="run" />
<arg value="lint" />
</exec-node>
您当然可以用作NPM的硬码模块,也可以默认为NPM,但是我将其与NPM和NPX一起使用。
从我可以收集的内容中,无法直接通过ANTRUN插件调用NPM。
我确实通过使用/c参数调用CMD(在Windows上)来运行它。
示例:
<exec executable="cmd">
<arg line="/c npm run babel -- src/main/webapp/js/es6/ --presets babel-preset-es2015 --out-dir src/main/webapp/js/"/>
</exec>
这对我在Windows上有用:
<exec executable="npm.cmd">
<arg value="version"/>
</exec>
如果您想使用npm,则应查看前端 - 磁性plugin。