Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何告诉gradle在构建时在项目中安装npm?_Java_Angular_Gradle_Npm Install - Fatal编程技术网

Java 如何告诉gradle在构建时在项目中安装npm?

Java 如何告诉gradle在构建时在项目中安装npm?,java,angular,gradle,npm-install,Java,Angular,Gradle,Npm Install,我的java web应用程序的angular 4 UI仅依赖于以下几个捆绑包。我从webapps根目录运行了以下命令。应用程序运行良好。我想知道最佳实践,因为我是新手 npm install rxjs npm install @angular/core@4.4.6 @angular/common@4.4.6 @angular/compiler@4.4.6 @angular/platform-browser@4.4.6 @angular/platform-browser-dynamic@4.4.6

我的java web应用程序的angular 4 UI仅依赖于以下几个捆绑包。我从webapps根目录运行了以下命令。应用程序运行良好。我想知道最佳实践,因为我是新手

npm install rxjs
npm install @angular/core@4.4.6 @angular/common@4.4.6 @angular/compiler@4.4.6 @angular/platform-browser@4.4.6 @angular/platform-browser-dynamic@4.4.6 @angular/router@4.4.6 @angular/forms@4.4.6 --save
npm install typescript@2.4.2 --save
npm install plugin-typescript@5.2.7 --save
我指的是
systemjs.config.js
中安装的捆绑包,如下所示:

paths: {
       'npm:' : 'node_modules/'
},
map: {
       '@angular/core' : 'npm:@angular/core/bundles/core.umd.js'
       .
       .
}
查询:

  • 应用程序不应该太重,不能包含
    war中的整个
    node\u模块
  • 如果我将
    node\u modules
    保存在项目根目录中而不是webapps中,我如何从
    systemjs.config.js
  • 我只想要那些包,而不是运行
    npm install@angular/cli
  • 如果我们可以使用全局
    node\u模块
    ,如何从
    systemjs.config.js
    中引用它(我更喜欢将其保存在project中,以免干扰服务器中使用不同版本的其他应用程序)
  • 最后,我应该在
    build.gradle
    中包括什么,以便在gradle构建时下载所需的捆绑包

  • 正如@Oliver Charlesworth所说,Gradle有他的局限性,但您可以创建自定义Gradle任务

    例如:

    task npmInstall(type: Exec) {
        workingDir 'src/main/webapp'
        commandLine 'npm', 'install'
    }
    
    将生成依赖项添加到
    war
    生成步骤中

    war {
        dependsOn npmBuild
    }
    

    正如Tim Hovius所说:您可以创建自己的任务

    如果不希望它一直执行,可以添加OnlyIf子句

    (正式文件:

    例如,在build.gradle中

    task doSomething {
       doLast {
            ...
       }
    }
    
    doSomething.enabled = (some condition goes here)    
    

    Gradle对JS生态系统没有天生的理解。你可以尝试一下,但根据我的经验,它有点有限。问题是每次都要运行
    npm install
    。因此理想情况下,你希望找到某种方法来指示任务何时最新。你是对的,但依赖项会被下载一次,所以只有第一次执行任务需要花费一些时间。
    task doSomething {
        doLast {
            def file = new File("dummy.txt")
    
            if (file.exists()) {
                project.exec {
                    commandLine 'someCommand', 'parameter'
                }
            }
        }
    }
    
    task doSomething {
       doLast {
            ...
       }
    }
    
    doSomething.enabled = (some condition goes here)