我的项目结构类似于以下内容:
-- 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-linux-x64/bin/node'' finished with non-zero exit value 255
答案 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
我更喜欢使用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']
}