在Windows上使用Ant脚本运行npm,ng命令,"系统找不到指定的文件"错误

时间:2017-04-05 09:55:52

标签: angularjs angular typescript ant angular-cli

当我尝试运行以下Ant脚本时,该脚本执行" npm" 命令:

<target name ="test">
    <exec executable="npm" failonerror="true">
        <arg value="install" />
    </exec>
</target>

失败并出现此错误:

Execute failed: java.io.IOException: Cannot run program "npm" 
(in directory "C:\Development\workspace\traqpath\WebSource"): 
CreateProcess error=2, The system cannot find the file specified

当我尝试运行Angular-CLI &#34; ng&#34; 命令时,情况也是如此:

<target name ="test">
        <exec executable="ng" failonerror="true">
            <arg value="build"/>
            <arg value="--prod"/>
            <arg value="--bh"/>
        </exec>
</target>

使用相同的错误消息,但对于&#34; ng&#34;:

Execute failed: java.io.IOException: Cannot run program "ng" 
(in directory "C:\Development\workspace\traqpath\WebSource"): 
CreateProcess error=2, The system cannot find the file specified

两个命令在Windows命令行中运行都没有问题,这意味着NodeJS安装正确,并且在PATH系统变量中正确配置了NodeJS路径。

3 个答案:

答案 0 :(得分:2)

我通过修改Ant脚本来指定&#34; npm&#34;的全名解决了这个问题。可执行文件,(以及第二种情况下的&#34; ng&#34;命令):

我的新Ant脚本现在看起来像这样:

<target name ="test">
    <exec executable="npm.cmd" failonerror="true">
        <arg value="install" />
    </exec>
</target>

<target name ="test">
        <exec executable="ng.cmd" failonerror="true">
            <arg value="build"/>
            <arg value="--prod"/>
            <arg value="--bh"/>
        </exec>
</target>

请注意,我使用了&#34; npm.cmd&#34; 而不是&#34; npm&#34;和&#34; ng.cmd&#34; < / strong>而不是&#34; ng&#34;。

答案 1 :(得分:0)

我解决了类似于你的解决方案,除了我调用&#34; npm build&#34;默认包含在&#34;脚本&#34;下的package.json中。部分。

<target name="build_windows">
  <exec executable="npm.cmd" failonerror="true">
    <arg value="run-script"/>
    <arg value="build"/>
  </exec>
</target>

我甚至介绍了另一个类似于&#34; build&#34;的npm脚本行。命名为&#34; buildprod&#34;像这样:

"scripts": {
  "build": "ng build -bh /context/",
  "buildprod": "ng build --prod --aot -bh /context/"
}

然后在我的ant build.xml文件中为生产构建引入了类似的目标:

<target name="build_prod_windows">
  <exec executable="npm.cmd" failonerror="true">
    <arg value="run-script"/>
    <arg value="buildprod"/>
  </exec>
</target>

这样,您可以在其他角度项目中保留相同的ant脚本,而不必担心在build.xml文件中保留不同的参数。相反,您需要确保package.json具有正确的脚本。

答案 2 :(得分:-3)

<target name ="test">
        <exec executable="ng" failonerror="true">
            <arg value="build"/>
            <arg value="--prod"/>
            <arg value="--bh"/>
        </exec>
</target>

当我尝试在linux中运行时,它再次给出同样的错误,说 执行失败:java.io.IOException:无法运行程序“ng”....

如何通过ANT在linux env中运行