Configuring nodeModulesDir in gradle - node-plugin

I am trying to configure caching of npm packages. This is my plugin configuration:

node { version = '4.5.0' npmVersion = '3.10.6' distBaseUrl = 'https://nodejs.org/dist' download = true workDir = file("$webAppSourceAbsolute/nodejs") nodeModulesDir = file("$webAppSourceAbsolute/") } 

And this is my task:

 task npmCacheConfig(type: NpmTask) { description = "Configure the NPM cache" outputs.upToDateWhen { false } def npmCacheDir = "${gradle.getGradleUserHomeDir()}/caches/npm" outputs.files file(npmCacheDir) args = ['config', 'set', 'cache', npmCacheDir] } 

But when I run this task, I got an error:

 :arm-bpa:nodeSetup UP-TO-DATE :arm-bpa:npmCacheConfig FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':myModule:npmCacheConfig'. > Could not run npm command - local npm not found but requested in gradle node configuration. A common reason for this is an npm-shrinkwrap.json file is present and un-installs npm. To resolve this, add npm with version '3.10.6' to your package.json. 

I can fix it:

 npmCacheConfig.doFirst { this.project.node.nodeModulesDir = file("$webAppSourceAbsolute/nodejs/node-v4.5.0-linux-x64/lib/") } npmCacheConfig.doLast { this.project.node.nodeModulesDir = file("$webAppSourceAbsolute/") } 

Is there any way to fix this without this hardcoding?

+3
gradle gradle-plugin
source share
1 answer

I fixed it as follows:

 npmCacheConfig.doFirst { def nodeJsDirectory = null def nodeVersion = this.project.node.version file("$webAppSourceAbsolute/nodejs/").traverse( type: FileType.DIRECTORIES, nameFilter: ~"^node-v$nodeVersion.*", postDir: { return FileVisitResult.TERMINATE } ) { nodeJsDirectory = it } if (nodeJsDirectory != null) { this.project.node.nodeModulesDir = file("$nodeJsDirectory/lib/") } else { throw new IllegalStateException("nodejs is not installed") } } npmCacheConfig.doLast { this.project.node.nodeModulesDir = file("$webAppSourceAbsolute/") } 
0
source share

All Articles