@@ -473,6 +473,9 @@ cd /D "{root}" && "{npm}" {npm_args}
473473 env [env_key ] = "1"
474474 env ["BUILD_BAZEL_RULES_NODEJS_VERSION" ] = VERSION
475475
476+ # NB: after running npm install, it's essential that we don't cause the repository rule to restart
477+ # This means we must not reference any additional labels after this point.
478+ # See https://github.com/bazelbuild/rules_nodejs/issues/2620
476479 repository_ctx .report_progress ("Running npm install on %s" % repository_ctx .attr .package_json )
477480 result = repository_ctx .execute (
478481 [repository_ctx .path ("_npm.cmd" if is_windows_host else "_npm.sh" )],
@@ -484,16 +487,18 @@ cd /D "{root}" && "{npm}" {npm_args}
484487 if result .return_code :
485488 fail ("npm_install failed: %s (%s)" % (result .stdout , result .stderr ))
486489
487- remove_npm_absolute_paths = Label ("//third_party/github.com/juanjoDiaz/removeNPMAbsolutePaths:bin/removeNPMAbsolutePaths" )
488-
489490 # removeNPMAbsolutePaths is run on node_modules after npm install as the package.json files
490491 # generated by npm are non-deterministic. They contain absolute install paths and other private
491492 # information fields starting with "_". removeNPMAbsolutePaths removes all fields starting with "_".
493+ fix_absolute_paths_cmd = [
494+ node ,
495+ repository_ctx .path (repository_ctx .attr ._remove_npm_absolute_paths ),
496+ root + "/node_modules" ,
497+ ]
498+
492499 if not repository_ctx .attr .quiet :
493- print ([node , repository_ctx .path (remove_npm_absolute_paths ), root + "/node_modules" ])
494- result = repository_ctx .execute (
495- [node , repository_ctx .path (remove_npm_absolute_paths ), root + "/node_modules" ],
496- )
500+ print (fix_absolute_paths_cmd )
501+ result = repository_ctx .execute (fix_absolute_paths_cmd )
497502
498503 if result .return_code :
499504 fail ("remove_npm_absolute_paths failed: %s (%s)" % (result .stdout , result .stderr ))
@@ -526,6 +531,7 @@ See npm CLI docs https://docs.npmjs.com/cli/install.html for complete list of su
526531 mandatory = True ,
527532 allow_single_file = True ,
528533 ),
534+ "_remove_npm_absolute_paths" : attr .label (default = Label ("//third_party/github.com/juanjoDiaz/removeNPMAbsolutePaths:bin/removeNPMAbsolutePaths" )),
529535 }),
530536 doc = """Runs npm install during workspace setup.
531537
0 commit comments