使用gradle执行不在项目

时间:2017-12-05 05:41:26

标签: java gradle webpack

我的项目结构类似于以下内容:

-- root
  -- gradlew
  -- build.gradle
  -- src
     -- main
       -- frontend
          -- webpack.config.js
          -- package.json
          -- src
          -- node_modules
       -- java
       -- resources
          -- static

我想让gradle运行位于webpack.config.js文件夹内的root/src/main/frontend,并将其写入bundle.js中的src/main/java/resources/static。我试过这个剧本:

task myNpmInstall(type: NodeTask) {
    args = ['install']
    inputs.file file('src/main/frontend/package.json')
    outputs.dir file('src/main/frontend/node_modules')
}

task webpack(type: NodeTask, dependsOn: 'myNpmInstall') {
    script = file('src/main/frontend/node_modules/.bin/webpack')
}

processResources.dependsOn 'webpack'

这是我package.json的一部分:

  "engines": {
    "npm": "5.5.1",
    "node": "8.9.1"
  },
  "scripts": {
    "build": "node ./node_modules/webpack/bin/webpack.js",
    "test": "mocha --compilers js:babel-core/register --require ./test/test_helper.js --recursive ./test",
    "test:watch": "npm run test -- --watch"
  },

这是webpack.config.js

module.exports = {
  entry: [
    './src/index.js'
  ],
  output: {
    path: __dirname,
    publicPath: '/',
    filename: 'bundle.js'
  },
  module: {
    loaders: [{
      test: /\.js$/,
      exclude: /node_modules/,
      loader: 'babel-loader'
    }]
  }
};

我收到此错误:

Caused by: java.lang.IllegalStateException: Required script property is not set.

我注意到,即使我运行./gradlew myNpmInstall,我也会遇到同样的错误。我怎样才能解决这个问题 ?

更新1 我将gradle文件内容更新为

node {
    version = '8.9.1'
    npmWorkDir = file('src/main/frontend')
    nodeModulesDir = file('src/main/frontend')
    download = true
}

task webpack(type: NodeTask, dependsOn: 'npmInstall') {
    script = file("$projectDir/src/main/frontend/node_modules/.bin/webpack")
}

processResources.dependsOn 'webpack'

现在我收到了这个错误:

No configuration file found and no output filename configured via CLI option.
A configuration file could be named 'webpack.config.js' in the current directory.
Use --help to display the CLI options.

Execution failed for task ':webpack' Caused by: org.gradle.process.internal.ExecException: Process 'command '/home/arian/workspace/myproj/.gradle/nodejs/node-v8.9.1-lin‌​ux-x64/bin/node'' finished with non-zero exit value 255

2 个答案:

答案 0 :(得分:1)

尝试将配置部分添加到节点:

node {
    version = '6.11.0'
    npmWorkDir = file('src/main/frontend')
    nodeModulesDir = file('src/main/frontend')
    download = true
}

使用node插件,您已经有npmInstall个任务,因此您可以移除任务myNpmInstall

请参阅examples

答案 1 :(得分:1)

首先,com.moowork.node docs 您可以使用nodeModulesDir

指定项目位置
node {
    download = true
    // Set the work directory where node_modules should be located
    nodeModulesDir = file("${project.projectDir}/src/main/frontend")
}

NodeTask用于运行./node script之类的内容。这就是为什么它抱怨Required script property is not set.。但通常你真正想要的是运行在package.json

中声明的yarn / npm任务

我更喜欢使用YarnTask,因为对我来说感觉更快

task webpack(type: YarnTask, dependsOn: yarn) {
    args = ['build-spring'] 
    // 'build-spring' is script in your package.json you want to run
}

对于npm,它看起来像

task webpack(type: NpmTask, dependsOn: npmInstall) {
    args = ['run','build-spring']
}
相关问题