Gradle无法执行npm命令

Ped*_*que 9 java intellij-idea gradle npm npm-install

我正在尝试在gradle任务中运行npm命令,但是我遇到了一个奇怪的错误:

Caused by: net.rubygrapefruit.platform.NativeException: Could not start 'npm'
    at net.rubygrapefruit.platform.internal.DefaultProcessLauncher.start(DefaultProcessLauncher.java:27)
    at net.rubygrapefruit.platform.internal.WrapperProcessLauncher.start(WrapperProcessLauncher.java:36)
    at org.gradle.process.internal.ExecHandleRunner.run(ExecHandleRunner.java:65)
    ... 2 more
Caused by: java.io.IOException: Cannot run program "npm" (in directory "/Users/psilva/Documents/projects/registrolivre"): error=2, No such file or directory
    at net.rubygrapefruit.platform.internal.DefaultProcessLauncher.start(DefaultProcessLauncher.java:25)
    ... 4 more
Caused by: java.io.IOException: error=2, No such file or directory
Run Code Online (Sandbox Code Playgroud)

这是我的任务:

task npmInstall(type: Exec) {
    commandLine "npm", "install"
}
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?

Vik*_*how 7

如果你在 Windows 上试试这个:

task npmInstall(type: Exec) {
    commandLine "npm.cmd", "install"
}
Run Code Online (Sandbox Code Playgroud)

而不是这个:

task npmInstall(type: Exec) {
    commandLine "npm", "install"
}
Run Code Online (Sandbox Code Playgroud)


Tay*_*714 6

这个答案对我来说适用于不同的 npm 相关任务。建议使用可执行文件和 args 而不是命令行。

executable 'npm' args ['install']

根据您的目录结构,您可能还需要添加 workingDir 属性并将其设置为 package.json 所在的目录。

作为替代方案,Gradle 节点插件对于管理 Gradle 构建中最常见的节点任务也非常方便。我使用这个插件作为我的 Node 任务的基础,然后根据需要创建其他自定义任务。


ALD*_*ENT 6

如果您使用的是 Windows 操作系统,则必须使用“npm.cmd”而不是“npm”。更好地检测操作系统是否为 windows 并构建您的 npm 命令。请看下面的代码片段,

import org.apache.tools.ant.taskdefs.condition.Os

task npmInstall(type: Exec) {
    String npm = 'npm';
    if (Os.isFamily(Os.FAMILY_WINDOWS)) {
        npm = 'npm.cmd'
    }
    workingDir 'src/main/webapp'
    commandLine npm, 'install'
}
Run Code Online (Sandbox Code Playgroud)