我想使用前端和后端自动构建应用程序。为此,我想使用maven和ant进行平台无关的复制和cli任务。有些像docker ...
这样的cli就行了。但这不适用于npm
或npm
本身提供的cli。
<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文件夹已添加到'global'PATH
env var中,windows cmd确实选择了正确的二进制文件,因为它使用PATHEXT
env var来确定可执行文件和不可执行文件。 ant exec插件不使用PATHEXT
,只执行失败的第一个名为npm
的文件。 解决方案是重命名路径中的普通npm
文件。这样,ant首先看到npm.cmd
文件,一切运行顺利。
答案 0 :(得分:1)
如果你想使用npm,你应该看一下frontend-maven-plugin。
答案 1 :(得分:1)
从我可以收集到的内容来看,不可能通过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>
答案 2 :(得分:0)
这在Windows上对我有效:
<exec executable="npm.cmd">
<arg value="version"/>
</exec>
答案 3 :(得分:0)
我知道这很旧,但这是我将来为他人所拥有的。可在我们的Mac,Unix和Windows框中使用。
<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和npx一起使用。