refactor: upgrade to rules_nodejs 7 and move toolchain registration call to new rules_js_configure WORKSPACE function
diff --git a/MODULE.bazel b/MODULE.bazel
index 08140c9..ace3343 100644
--- a/MODULE.bazel
+++ b/MODULE.bazel
@@ -15,6 +15,13 @@
 bazel_dep(name = "rules_nodejs", version = "6.0.5")
 bazel_dep(name = "platforms", version = "0.0.5")
 
+archive_override(
+    module_name = "rules_nodejs",
+    integrity = "sha256-w7yMsYGMkgKhVZJizhmB9T668fGzdEvRXThptjTtnpo=",
+    strip_prefix = "rules_nodejs-d28957af10035c3030ffcb26ced95bb411a50692",
+    urls = ["https://github.com/bazelbuild/rules_nodejs/archive/d28957af10035c3030ffcb26ced95bb411a50692.tar.gz"],
+)
+
 node = use_extension("@rules_nodejs//nodejs:extensions.bzl", "node")
 use_repo(node, "nodejs_darwin_amd64")
 use_repo(node, "nodejs_darwin_arm64")
diff --git a/WORKSPACE b/WORKSPACE
index 17abf41..d5d5c86 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -3,15 +3,6 @@
     name = "aspect_rules_js",
 )
 
-load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
-
-http_archive(
-    name = "rules_nodejs",
-    sha256 = "a50986c7d2f2dc43a5b9b81a6245fd89bdc4866f1d5e316d9cef2782dd859292",
-    strip_prefix = "rules_nodejs-6.0.5",
-    url = "https://github.com/bazelbuild/rules_nodejs/releases/download/v6.0.5/rules_nodejs-v6.0.5.tar.gz",
-)
-
 load("//js:dev_repositories.bzl", "rules_js_dev_dependencies")
 
 rules_js_dev_dependencies()
@@ -20,19 +11,16 @@
 
 rules_js_dependencies()
 
-load("@aspect_bazel_lib//lib:repositories.bzl", "aspect_bazel_lib_dependencies", "register_jq_toolchains")
+load("//js:configure.bzl", "rules_js_configure")
+
+rules_js_configure(node_version = "16.14.2")
+
+load("@aspect_bazel_lib//lib:repositories.bzl", "aspect_bazel_lib_dependencies")
 
 aspect_bazel_lib_dependencies()
 
-register_jq_toolchains()
-
 load("@rules_nodejs//nodejs:repositories.bzl", "nodejs_register_toolchains")
 
-nodejs_register_toolchains(
-    name = "nodejs",
-    node_version = "16.14.2",
-)
-
 # Alternate toolchains for testing across versions
 nodejs_register_toolchains(
     name = "node16",
diff --git a/docs/npm_import.md b/docs/npm_import.md
index 7617c7e..11040ad 100644
--- a/docs/npm_import.md
+++ b/docs/npm_import.md
@@ -28,8 +28,7 @@
            <a href="#npm_import-link_workspace">link_workspace</a>, <a href="#npm_import-link_packages">link_packages</a>, <a href="#npm_import-lifecycle_hooks">lifecycle_hooks</a>, <a href="#npm_import-lifecycle_hooks_execution_requirements">lifecycle_hooks_execution_requirements</a>,
            <a href="#npm_import-lifecycle_hooks_env">lifecycle_hooks_env</a>, <a href="#npm_import-lifecycle_hooks_use_default_shell_env">lifecycle_hooks_use_default_shell_env</a>, <a href="#npm_import-integrity">integrity</a>, <a href="#npm_import-url">url</a>, <a href="#npm_import-commit">commit</a>,
            <a href="#npm_import-replace_package">replace_package</a>, <a href="#npm_import-package_visibility">package_visibility</a>, <a href="#npm_import-patch_args">patch_args</a>, <a href="#npm_import-patches">patches</a>, <a href="#npm_import-custom_postinstall">custom_postinstall</a>, <a href="#npm_import-npm_auth">npm_auth</a>,
-           <a href="#npm_import-npm_auth_basic">npm_auth_basic</a>, <a href="#npm_import-npm_auth_username">npm_auth_username</a>, <a href="#npm_import-npm_auth_password">npm_auth_password</a>, <a href="#npm_import-bins">bins</a>, <a href="#npm_import-dev">dev</a>,
-           <a href="#npm_import-register_copy_directory_toolchains">register_copy_directory_toolchains</a>, <a href="#npm_import-register_copy_to_directory_toolchains">register_copy_to_directory_toolchains</a>, <a href="#npm_import-kwargs">kwargs</a>)
+           <a href="#npm_import-npm_auth_basic">npm_auth_basic</a>, <a href="#npm_import-npm_auth_username">npm_auth_username</a>, <a href="#npm_import-npm_auth_password">npm_auth_password</a>, <a href="#npm_import-bins">bins</a>, <a href="#npm_import-dev">dev</a>, <a href="#npm_import-kwargs">kwargs</a>)
 </pre>
 
 Import a single npm package into Bazel.
@@ -161,8 +160,6 @@
 | <a id="npm_import-npm_auth_password"></a>npm_auth_password |  Auth password to authenticate with npm. When using Basic authentication.   |  <code>""</code> |
 | <a id="npm_import-bins"></a>bins |  Dictionary of <code>node_modules/.bin</code> binary files to create mapped to their node entry points.<br><br>This is typically derived from the "bin" attribute in the package.json file of the npm package being linked.<br><br>For example:<br><br><pre><code> bins = {     "foo": "./foo.js",     "bar": "./bar.js", } </code></pre><br><br>In the future, this field may be automatically populated by npm_translate_lock from information in the pnpm lock file. That feature is currently blocked on https://github.com/pnpm/pnpm/issues/5131.   |  <code>{}</code> |
 | <a id="npm_import-dev"></a>dev |  Whether this npm package is a dev dependency   |  <code>False</code> |
-| <a id="npm_import-register_copy_directory_toolchains"></a>register_copy_directory_toolchains |  if True, <code>@aspect_bazel_lib//lib:repositories.bzl</code> <code>register_copy_directory_toolchains()</code> is called if the toolchain is not already registered   |  <code>True</code> |
-| <a id="npm_import-register_copy_to_directory_toolchains"></a>register_copy_to_directory_toolchains |  if True, <code>@aspect_bazel_lib//lib:repositories.bzl</code> <code>register_copy_to_directory_toolchains()</code> is called if the toolchain is not already registered   |  <code>True</code> |
 | <a id="npm_import-kwargs"></a>kwargs |  Internal use only   |  none |
 
 
diff --git a/docs/npm_package.md b/docs/npm_package.md
index 7f536f9..434ce8f 100644
--- a/docs/npm_package.md
+++ b/docs/npm_package.md
@@ -146,14 +146,6 @@
 
 For more information on stamping, read https://docs.aspect.build/rules/aspect_bazel_lib/docs/stamping.
 
-Using this rule requires that you register the jq toolchain in your WORKSPACE:
-
-```starlark
-load("@aspect_bazel_lib//lib:repositories.bzl", "register_jq_toolchains")
-
-register_jq_toolchains()
-```
-
 
 **PARAMETERS**
 
diff --git a/docs/npm_translate_lock.md b/docs/npm_translate_lock.md
index b5a41ca..6cfbcee 100644
--- a/docs/npm_translate_lock.md
+++ b/docs/npm_translate_lock.md
@@ -67,8 +67,6 @@
                    <a href="#npm_translate_lock-lifecycle_hooks_use_default_shell_env">lifecycle_hooks_use_default_shell_env</a>, <a href="#npm_translate_lock-replace_packages">replace_packages</a>, <a href="#npm_translate_lock-bins">bins</a>,
                    <a href="#npm_translate_lock-verify_node_modules_ignored">verify_node_modules_ignored</a>, <a href="#npm_translate_lock-verify_patches">verify_patches</a>, <a href="#npm_translate_lock-quiet">quiet</a>,
                    <a href="#npm_translate_lock-external_repository_action_cache">external_repository_action_cache</a>, <a href="#npm_translate_lock-link_workspace">link_workspace</a>, <a href="#npm_translate_lock-pnpm_version">pnpm_version</a>, <a href="#npm_translate_lock-use_pnpm">use_pnpm</a>,
-                   <a href="#npm_translate_lock-register_copy_directory_toolchains">register_copy_directory_toolchains</a>, <a href="#npm_translate_lock-register_copy_to_directory_toolchains">register_copy_to_directory_toolchains</a>,
-                   <a href="#npm_translate_lock-register_coreutils_toolchains">register_coreutils_toolchains</a>, <a href="#npm_translate_lock-register_yq_toolchains">register_yq_toolchains</a>, <a href="#npm_translate_lock-register_tar_toolchains">register_tar_toolchains</a>,
                    <a href="#npm_translate_lock-npm_package_target_name">npm_package_target_name</a>, <a href="#npm_translate_lock-use_starlark_yaml_parser">use_starlark_yaml_parser</a>, <a href="#npm_translate_lock-kwargs">kwargs</a>)
 </pre>
 
@@ -133,11 +131,6 @@
 | <a id="npm_translate_lock-link_workspace"></a>link_workspace |  The workspace name where links will be created for the packages in this lock file.<br><br>This is typically set in rule sets and libraries that vendor the starlark generated by npm_translate_lock so the link_workspace passed to npm_import is set correctly so that links are created in the external repository and not the user workspace.<br><br>Can be left unspecified if the link workspace is the user workspace.   |  <code>None</code> |
 | <a id="npm_translate_lock-pnpm_version"></a>pnpm_version |  pnpm version to use when generating the @pnpm repository. Set to None to not create this repository.<br><br>Can be left unspecified and the rules_js default <code>LATEST_PNPM_VERSION</code> will be used.<br><br>Use <code>use_pnpm</code> for bzlmod.   |  <code>"8.15.3"</code> |
 | <a id="npm_translate_lock-use_pnpm"></a>use_pnpm |  label of the pnpm extension to use.<br><br>Can be left unspecified and the rules_js default pnpm extension (with the <code>LATEST_PNPM_VERSION</code>) will be used.<br><br>Use <code>pnpm_version</code> for non-bzlmod.   |  <code>None</code> |
-| <a id="npm_translate_lock-register_copy_directory_toolchains"></a>register_copy_directory_toolchains |  if True, <code>@aspect_bazel_lib//lib:repositories.bzl</code> <code>register_copy_directory_toolchains()</code> is called if the toolchain is not already registered   |  <code>True</code> |
-| <a id="npm_translate_lock-register_copy_to_directory_toolchains"></a>register_copy_to_directory_toolchains |  if True, <code>@aspect_bazel_lib//lib:repositories.bzl</code> <code>register_copy_to_directory_toolchains()</code> is called if the toolchain is not already registered   |  <code>True</code> |
-| <a id="npm_translate_lock-register_coreutils_toolchains"></a>register_coreutils_toolchains |  if True, <code>@aspect_bazel_lib//lib:repositories.bzl</code> <code>register_coreutils_toolchains()</code> is called if the toolchain is not already registered   |  <code>True</code> |
-| <a id="npm_translate_lock-register_yq_toolchains"></a>register_yq_toolchains |  if True, <code>@aspect_bazel_lib//lib:repositories.bzl</code> <code>register_yq_toolchains()</code> is called if the toolchain is not already registered   |  <code>True</code> |
-| <a id="npm_translate_lock-register_tar_toolchains"></a>register_tar_toolchains |  if True, <code>@aspect_bazel_lib//lib:repositories.bzl</code> <code>register_tar_toolchains()</code> is called if the toolchain is not already registered   |  <code>True</code> |
 | <a id="npm_translate_lock-npm_package_target_name"></a>npm_package_target_name |  The name of linked <code>npm_package</code> targets. When <code>npm_package</code> targets are linked as pnpm workspace packages, the name of the target must align with this value.<br><br>The <code>{dirname}</code> placeholder is replaced with the directory name of the target.<br><br>By default the directory name of the target is used.<br><br>Default: <code>{dirname}</code>   |  <code>"{dirname}"</code> |
 | <a id="npm_translate_lock-use_starlark_yaml_parser"></a>use_starlark_yaml_parser |  Opt-out of using <code>yq</code> to parse the pnpm-lock file which was added in https://github.com/aspect-build/rules_js/pull/1458 and use the legacy starlark yaml parser instead.<br><br>This opt-out is a return safety in cases where yq is not able to parse the pnpm generated yaml file. For example, this has been observed to happen due to a line such as the following in the pnpm generated lock file:<br><br><pre><code> resolution: {tarball: https://gitpkg.vercel.app/blockprotocol/blockprotocol/packages/%40blockprotocol/type-system-web?6526c0e} </code></pre><br><br>where the <code>?</code> character in the <code>tarball</code> value causes <code>yq</code> to fail with:<br><br><pre><code> $ yq pnpm-lock.yaml -o=json Error: bad file 'pnpm-lock.yaml': yaml: line 7129: did not find expected ',' or '}' </code></pre><br><br>If the tarball value is quoted or escaped then yq would accept it but as of this writing, the latest version of pnpm (8.14.3) does not quote or escape such a value and the latest version of yq (4.40.5) does not handle it as is.<br><br>Possibly related to https://github.com/pnpm/pnpm/issues/5414.   |  <code>False</code> |
 | <a id="npm_translate_lock-kwargs"></a>kwargs |  Internal use only   |  none |
diff --git a/e2e/bzlmod/MODULE.bazel b/e2e/bzlmod/MODULE.bazel
index 63dc45f..fb3259e 100644
--- a/e2e/bzlmod/MODULE.bazel
+++ b/e2e/bzlmod/MODULE.bazel
@@ -13,6 +13,13 @@
     path = "../..",
 )
 
+archive_override(
+    module_name = "rules_nodejs",
+    integrity = "sha256-w7yMsYGMkgKhVZJizhmB9T668fGzdEvRXThptjTtnpo=",
+    strip_prefix = "rules_nodejs-d28957af10035c3030ffcb26ced95bb411a50692",
+    urls = ["https://github.com/bazelbuild/rules_nodejs/archive/d28957af10035c3030ffcb26ced95bb411a50692.tar.gz"],
+)
+
 npm = use_extension(
     "@aspect_rules_js//npm:extensions.bzl",
     "npm",
diff --git a/e2e/git_dep_metadata/MODULE.bazel b/e2e/git_dep_metadata/MODULE.bazel
index 5379023..637c449 100644
--- a/e2e/git_dep_metadata/MODULE.bazel
+++ b/e2e/git_dep_metadata/MODULE.bazel
@@ -9,6 +9,13 @@
     path = "../..",
 )
 
+archive_override(
+    module_name = "rules_nodejs",
+    integrity = "sha256-w7yMsYGMkgKhVZJizhmB9T668fGzdEvRXThptjTtnpo=",
+    strip_prefix = "rules_nodejs-d28957af10035c3030ffcb26ced95bb411a50692",
+    urls = ["https://github.com/bazelbuild/rules_nodejs/archive/d28957af10035c3030ffcb26ced95bb411a50692.tar.gz"],
+)
+
 npm = use_extension(
     "@aspect_rules_js//npm:extensions.bzl",
     "npm",
diff --git a/e2e/git_dep_metadata/WORKSPACE b/e2e/git_dep_metadata/WORKSPACE
index 639f1b9..3aff4b1 100644
--- a/e2e/git_dep_metadata/WORKSPACE
+++ b/e2e/git_dep_metadata/WORKSPACE
@@ -7,12 +7,9 @@
 
 rules_js_dependencies()
 
-load("@rules_nodejs//nodejs:repositories.bzl", "DEFAULT_NODE_VERSION", "nodejs_register_toolchains")
+load("@aspect_rules_js//js:configure.bzl", "rules_js_configure")
 
-nodejs_register_toolchains(
-    name = "nodejs",
-    node_version = DEFAULT_NODE_VERSION,
-)
+rules_js_configure()
 
 load("@aspect_rules_js//npm:repositories.bzl", "npm_import")
 
diff --git a/e2e/gyp_no_install_script/MODULE.bazel b/e2e/gyp_no_install_script/MODULE.bazel
index 1372781..707fbab 100644
--- a/e2e/gyp_no_install_script/MODULE.bazel
+++ b/e2e/gyp_no_install_script/MODULE.bazel
@@ -5,6 +5,13 @@
     path = "../..",
 )
 
+archive_override(
+    module_name = "rules_nodejs",
+    integrity = "sha256-w7yMsYGMkgKhVZJizhmB9T668fGzdEvRXThptjTtnpo=",
+    strip_prefix = "rules_nodejs-d28957af10035c3030ffcb26ced95bb411a50692",
+    urls = ["https://github.com/bazelbuild/rules_nodejs/archive/d28957af10035c3030ffcb26ced95bb411a50692.tar.gz"],
+)
+
 npm = use_extension("@aspect_rules_js//npm:extensions.bzl", "npm")
 npm.npm_translate_lock(
     name = "npm",
diff --git a/e2e/gyp_no_install_script/WORKSPACE b/e2e/gyp_no_install_script/WORKSPACE
index a7c5ba1..32a7bbb 100644
--- a/e2e/gyp_no_install_script/WORKSPACE
+++ b/e2e/gyp_no_install_script/WORKSPACE
@@ -16,12 +16,9 @@
 
 rules_js_dependencies()
 
-load("@rules_nodejs//nodejs:repositories.bzl", "DEFAULT_NODE_VERSION", "nodejs_register_toolchains")
+load("@aspect_rules_js//js:configure.bzl", "rules_js_configure")
 
-nodejs_register_toolchains(
-    name = "nodejs",
-    node_version = DEFAULT_NODE_VERSION,
-)
+rules_js_configure()
 
 load("@aspect_rules_js//npm:repositories.bzl", "npm_translate_lock")
 
diff --git a/e2e/js_image_docker/WORKSPACE b/e2e/js_image_docker/WORKSPACE
index 0c87270..bfbc192 100644
--- a/e2e/js_image_docker/WORKSPACE
+++ b/e2e/js_image_docker/WORKSPACE
@@ -12,12 +12,9 @@
 
 rules_js_dependencies()
 
-load("@rules_nodejs//nodejs:repositories.bzl", "nodejs_register_toolchains")
+load("@aspect_rules_js//js:configure.bzl", "rules_js_configure")
 
-nodejs_register_toolchains(
-    name = "nodejs",
-    node_version = "16.14.2",
-)
+rules_js_configure(node_version = "16.14.2")
 
 load("@aspect_rules_js//npm:repositories.bzl", "npm_translate_lock")
 
diff --git a/e2e/js_image_oci/WORKSPACE b/e2e/js_image_oci/WORKSPACE
index 9e7df1d..69fb64f 100644
--- a/e2e/js_image_oci/WORKSPACE
+++ b/e2e/js_image_oci/WORKSPACE
@@ -14,12 +14,9 @@
 
 rules_js_dependencies()
 
-load("@rules_nodejs//nodejs:repositories.bzl", "nodejs_register_toolchains")
+load("@aspect_rules_js//js:configure.bzl", "rules_js_configure")
 
-nodejs_register_toolchains(
-    name = "nodejs",
-    node_version = "16.14.2",
-)
+rules_js_configure(node_version = "16.14.2")
 
 load("@aspect_rules_js//npm:repositories.bzl", "npm_translate_lock")
 
diff --git a/e2e/js_run_devserver/MODULE.bazel b/e2e/js_run_devserver/MODULE.bazel
index d618ac4..9b3d70e 100644
--- a/e2e/js_run_devserver/MODULE.bazel
+++ b/e2e/js_run_devserver/MODULE.bazel
@@ -14,6 +14,13 @@
     path = "../..",
 )
 
+archive_override(
+    module_name = "rules_nodejs",
+    integrity = "sha256-w7yMsYGMkgKhVZJizhmB9T668fGzdEvRXThptjTtnpo=",
+    strip_prefix = "rules_nodejs-d28957af10035c3030ffcb26ced95bb411a50692",
+    urls = ["https://github.com/bazelbuild/rules_nodejs/archive/d28957af10035c3030ffcb26ced95bb411a50692.tar.gz"],
+)
+
 pnpm = use_extension("@aspect_rules_js//npm:extensions.bzl", "pnpm")
 use_repo(pnpm, "pnpm")
 
diff --git a/e2e/js_run_devserver/WORKSPACE b/e2e/js_run_devserver/WORKSPACE
index 762ce19..0df90ca 100644
--- a/e2e/js_run_devserver/WORKSPACE
+++ b/e2e/js_run_devserver/WORKSPACE
@@ -7,12 +7,9 @@
 
 rules_js_dependencies()
 
-load("@rules_nodejs//nodejs:repositories.bzl", "DEFAULT_NODE_VERSION", "nodejs_register_toolchains")
+load("@aspect_rules_js//js:configure.bzl", "rules_js_configure")
 
-nodejs_register_toolchains(
-    name = "nodejs",
-    node_version = DEFAULT_NODE_VERSION,
-)
+rules_js_configure()
 
 load("@aspect_rules_js//npm:repositories.bzl", "npm_translate_lock")
 
diff --git a/e2e/npm_link_package-esm/WORKSPACE b/e2e/npm_link_package-esm/WORKSPACE
index cfe378e..8003b73 100644
--- a/e2e/npm_link_package-esm/WORKSPACE
+++ b/e2e/npm_link_package-esm/WORKSPACE
@@ -7,12 +7,9 @@
 
 rules_js_dependencies()
 
-load("@rules_nodejs//nodejs:repositories.bzl", "nodejs_register_toolchains")
+load("@aspect_rules_js//js:configure.bzl", "rules_js_configure")
 
-nodejs_register_toolchains(
-    name = "nodejs",
-    node_version = "16.9.0",
-)
+rules_js_configure(node_version = "16.9.0")
 
 load("@aspect_rules_js//npm:repositories.bzl", "npm_translate_lock")
 
diff --git a/e2e/npm_link_package/WORKSPACE b/e2e/npm_link_package/WORKSPACE
index 4a853a1..3efb398 100644
--- a/e2e/npm_link_package/WORKSPACE
+++ b/e2e/npm_link_package/WORKSPACE
@@ -7,12 +7,9 @@
 
 rules_js_dependencies()
 
-load("@rules_nodejs//nodejs:repositories.bzl", "nodejs_register_toolchains")
+load("@aspect_rules_js//js:configure.bzl", "rules_js_configure")
 
-nodejs_register_toolchains(
-    name = "nodejs",
-    node_version = "16.14.2",
-)
+rules_js_configure(node_version = "16.14.2")
 
 load("@aspect_rules_js//npm:repositories.bzl", "npm_translate_lock")
 
diff --git a/e2e/npm_translate_lock/MODULE.bazel b/e2e/npm_translate_lock/MODULE.bazel
index a662b2d..889b389 100644
--- a/e2e/npm_translate_lock/MODULE.bazel
+++ b/e2e/npm_translate_lock/MODULE.bazel
@@ -14,6 +14,13 @@
     path = "../..",
 )
 
+archive_override(
+    module_name = "rules_nodejs",
+    integrity = "sha256-w7yMsYGMkgKhVZJizhmB9T668fGzdEvRXThptjTtnpo=",
+    strip_prefix = "rules_nodejs-d28957af10035c3030ffcb26ced95bb411a50692",
+    urls = ["https://github.com/bazelbuild/rules_nodejs/archive/d28957af10035c3030ffcb26ced95bb411a50692.tar.gz"],
+)
+
 npm = use_extension("@aspect_rules_js//npm:extensions.bzl", "npm")
 npm.npm_translate_lock(
     name = "npm",
diff --git a/e2e/npm_translate_lock/WORKSPACE b/e2e/npm_translate_lock/WORKSPACE
index 5631b25..a385453 100644
--- a/e2e/npm_translate_lock/WORKSPACE
+++ b/e2e/npm_translate_lock/WORKSPACE
@@ -7,12 +7,9 @@
 
 rules_js_dependencies()
 
-load("@rules_nodejs//nodejs:repositories.bzl", "DEFAULT_NODE_VERSION", "nodejs_register_toolchains")
+load("@aspect_rules_js//js:configure.bzl", "rules_js_configure")
 
-nodejs_register_toolchains(
-    name = "nodejs",
-    node_version = DEFAULT_NODE_VERSION,
-)
+rules_js_configure()
 
 load("@aspect_rules_js//npm:repositories.bzl", "npm_translate_lock")
 
diff --git a/e2e/npm_translate_lock_auth/MODULE.bazel b/e2e/npm_translate_lock_auth/MODULE.bazel
index a08b9d0..23b4f04 100644
--- a/e2e/npm_translate_lock_auth/MODULE.bazel
+++ b/e2e/npm_translate_lock_auth/MODULE.bazel
@@ -12,6 +12,13 @@
     path = "../..",
 )
 
+archive_override(
+    module_name = "rules_nodejs",
+    integrity = "sha256-w7yMsYGMkgKhVZJizhmB9T668fGzdEvRXThptjTtnpo=",
+    strip_prefix = "rules_nodejs-d28957af10035c3030ffcb26ced95bb411a50692",
+    urls = ["https://github.com/bazelbuild/rules_nodejs/archive/d28957af10035c3030ffcb26ced95bb411a50692.tar.gz"],
+)
+
 npm = use_extension("@aspect_rules_js//npm:extensions.bzl", "npm")
 npm.npm_translate_lock(
     name = "npm",
diff --git a/e2e/npm_translate_lock_auth/WORKSPACE b/e2e/npm_translate_lock_auth/WORKSPACE
index 8e31b65..025bd07 100644
--- a/e2e/npm_translate_lock_auth/WORKSPACE
+++ b/e2e/npm_translate_lock_auth/WORKSPACE
@@ -7,12 +7,9 @@
 
 rules_js_dependencies()
 
-load("@rules_nodejs//nodejs:repositories.bzl", "DEFAULT_NODE_VERSION", "nodejs_register_toolchains")
+load("@aspect_rules_js//js:configure.bzl", "rules_js_configure")
 
-nodejs_register_toolchains(
-    name = "nodejs",
-    node_version = DEFAULT_NODE_VERSION,
-)
+rules_js_configure()
 
 load("@aspect_rules_js//npm:repositories.bzl", "npm_translate_lock")
 
diff --git a/e2e/npm_translate_lock_empty/MODULE.bazel b/e2e/npm_translate_lock_empty/MODULE.bazel
index 0951f49..d26d70d 100644
--- a/e2e/npm_translate_lock_empty/MODULE.bazel
+++ b/e2e/npm_translate_lock_empty/MODULE.bazel
@@ -14,6 +14,13 @@
     path = "../..",
 )
 
+archive_override(
+    module_name = "rules_nodejs",
+    integrity = "sha256-w7yMsYGMkgKhVZJizhmB9T668fGzdEvRXThptjTtnpo=",
+    strip_prefix = "rules_nodejs-d28957af10035c3030ffcb26ced95bb411a50692",
+    urls = ["https://github.com/bazelbuild/rules_nodejs/archive/d28957af10035c3030ffcb26ced95bb411a50692.tar.gz"],
+)
+
 npm = use_extension("@aspect_rules_js//npm:extensions.bzl", "npm")
 npm.npm_translate_lock(
     name = "npm",
diff --git a/e2e/npm_translate_lock_empty/WORKSPACE b/e2e/npm_translate_lock_empty/WORKSPACE
index 6d21251..699955a 100644
--- a/e2e/npm_translate_lock_empty/WORKSPACE
+++ b/e2e/npm_translate_lock_empty/WORKSPACE
@@ -7,12 +7,9 @@
 
 rules_js_dependencies()
 
-load("@rules_nodejs//nodejs:repositories.bzl", "DEFAULT_NODE_VERSION", "nodejs_register_toolchains")
+load("@aspect_rules_js//js:configure.bzl", "rules_js_configure")
 
-nodejs_register_toolchains(
-    name = "nodejs",
-    node_version = DEFAULT_NODE_VERSION,
-)
+rules_js_configure()
 
 load("@aspect_rules_js//npm:repositories.bzl", "npm_translate_lock")
 
diff --git a/e2e/npm_translate_lock_git+ssh/MODULE.bazel b/e2e/npm_translate_lock_git+ssh/MODULE.bazel
index 8fdfa23..72e0e67 100644
--- a/e2e/npm_translate_lock_git+ssh/MODULE.bazel
+++ b/e2e/npm_translate_lock_git+ssh/MODULE.bazel
@@ -12,6 +12,13 @@
     path = "../..",
 )
 
+archive_override(
+    module_name = "rules_nodejs",
+    integrity = "sha256-w7yMsYGMkgKhVZJizhmB9T668fGzdEvRXThptjTtnpo=",
+    strip_prefix = "rules_nodejs-d28957af10035c3030ffcb26ced95bb411a50692",
+    urls = ["https://github.com/bazelbuild/rules_nodejs/archive/d28957af10035c3030ffcb26ced95bb411a50692.tar.gz"],
+)
+
 npm = use_extension("@aspect_rules_js//npm:extensions.bzl", "npm")
 npm.npm_translate_lock(
     name = "npm",
diff --git a/e2e/npm_translate_lock_git+ssh/WORKSPACE b/e2e/npm_translate_lock_git+ssh/WORKSPACE
index 8e31b65..025bd07 100644
--- a/e2e/npm_translate_lock_git+ssh/WORKSPACE
+++ b/e2e/npm_translate_lock_git+ssh/WORKSPACE
@@ -7,12 +7,9 @@
 
 rules_js_dependencies()
 
-load("@rules_nodejs//nodejs:repositories.bzl", "DEFAULT_NODE_VERSION", "nodejs_register_toolchains")
+load("@aspect_rules_js//js:configure.bzl", "rules_js_configure")
 
-nodejs_register_toolchains(
-    name = "nodejs",
-    node_version = DEFAULT_NODE_VERSION,
-)
+rules_js_configure()
 
 load("@aspect_rules_js//npm:repositories.bzl", "npm_translate_lock")
 
diff --git a/e2e/npm_translate_lock_multi/MODULE.bazel b/e2e/npm_translate_lock_multi/MODULE.bazel
index 9be8a7e..f76724f 100644
--- a/e2e/npm_translate_lock_multi/MODULE.bazel
+++ b/e2e/npm_translate_lock_multi/MODULE.bazel
@@ -12,6 +12,13 @@
     path = "../..",
 )
 
+archive_override(
+    module_name = "rules_nodejs",
+    integrity = "sha256-w7yMsYGMkgKhVZJizhmB9T668fGzdEvRXThptjTtnpo=",
+    strip_prefix = "rules_nodejs-d28957af10035c3030ffcb26ced95bb411a50692",
+    urls = ["https://github.com/bazelbuild/rules_nodejs/archive/d28957af10035c3030ffcb26ced95bb411a50692.tar.gz"],
+)
+
 npm = use_extension("@aspect_rules_js//npm:extensions.bzl", "npm")
 npm.npm_translate_lock(
     name = "app1_npm",
diff --git a/e2e/npm_translate_lock_multi/WORKSPACE b/e2e/npm_translate_lock_multi/WORKSPACE
index bdd846b..d9dea8c 100644
--- a/e2e/npm_translate_lock_multi/WORKSPACE
+++ b/e2e/npm_translate_lock_multi/WORKSPACE
@@ -7,12 +7,9 @@
 
 rules_js_dependencies()
 
-load("@rules_nodejs//nodejs:repositories.bzl", "DEFAULT_NODE_VERSION", "nodejs_register_toolchains")
+load("@aspect_rules_js//js:configure.bzl", "rules_js_configure")
 
-nodejs_register_toolchains(
-    name = "nodejs",
-    node_version = DEFAULT_NODE_VERSION,
-)
+rules_js_configure()
 
 load("@aspect_rules_js//npm:repositories.bzl", "npm_translate_lock")
 
diff --git a/e2e/npm_translate_lock_partial_clone/MODULE.bazel b/e2e/npm_translate_lock_partial_clone/MODULE.bazel
index 6ab0ba3..3879fff 100644
--- a/e2e/npm_translate_lock_partial_clone/MODULE.bazel
+++ b/e2e/npm_translate_lock_partial_clone/MODULE.bazel
@@ -12,6 +12,13 @@
     path = "../..",
 )
 
+archive_override(
+    module_name = "rules_nodejs",
+    integrity = "sha256-w7yMsYGMkgKhVZJizhmB9T668fGzdEvRXThptjTtnpo=",
+    strip_prefix = "rules_nodejs-d28957af10035c3030ffcb26ced95bb411a50692",
+    urls = ["https://github.com/bazelbuild/rules_nodejs/archive/d28957af10035c3030ffcb26ced95bb411a50692.tar.gz"],
+)
+
 npm = use_extension("@aspect_rules_js//npm:extensions.bzl", "npm")
 npm.npm_translate_lock(
     name = "npm",
diff --git a/e2e/npm_translate_lock_partial_clone/WORKSPACE b/e2e/npm_translate_lock_partial_clone/WORKSPACE
index 58a8f42..dbf6cc5 100644
--- a/e2e/npm_translate_lock_partial_clone/WORKSPACE
+++ b/e2e/npm_translate_lock_partial_clone/WORKSPACE
@@ -7,12 +7,9 @@
 
 rules_js_dependencies()
 
-load("@rules_nodejs//nodejs:repositories.bzl", "DEFAULT_NODE_VERSION", "nodejs_register_toolchains")
+load("@aspect_rules_js//js:configure.bzl", "rules_js_configure")
 
-nodejs_register_toolchains(
-    name = "nodejs",
-    node_version = DEFAULT_NODE_VERSION,
-)
+rules_js_configure()
 
 load("@aspect_rules_js//npm:repositories.bzl", "npm_translate_lock")
 
diff --git a/e2e/npm_translate_lock_subdir_patch/MODULE.bazel b/e2e/npm_translate_lock_subdir_patch/MODULE.bazel
index 07f4464..73dbc43 100644
--- a/e2e/npm_translate_lock_subdir_patch/MODULE.bazel
+++ b/e2e/npm_translate_lock_subdir_patch/MODULE.bazel
@@ -5,6 +5,13 @@
     path = "../..",
 )
 
+archive_override(
+    module_name = "rules_nodejs",
+    integrity = "sha256-w7yMsYGMkgKhVZJizhmB9T668fGzdEvRXThptjTtnpo=",
+    strip_prefix = "rules_nodejs-d28957af10035c3030ffcb26ced95bb411a50692",
+    urls = ["https://github.com/bazelbuild/rules_nodejs/archive/d28957af10035c3030ffcb26ced95bb411a50692.tar.gz"],
+)
+
 npm = use_extension("@aspect_rules_js//npm:extensions.bzl", "npm")
 npm.npm_translate_lock(
     name = "npm",
diff --git a/e2e/npm_translate_lock_subdir_patch/WORKSPACE b/e2e/npm_translate_lock_subdir_patch/WORKSPACE
index 5d76c85..4623334 100644
--- a/e2e/npm_translate_lock_subdir_patch/WORKSPACE
+++ b/e2e/npm_translate_lock_subdir_patch/WORKSPACE
@@ -7,12 +7,9 @@
 
 rules_js_dependencies()
 
-load("@rules_nodejs//nodejs:repositories.bzl", "DEFAULT_NODE_VERSION", "nodejs_register_toolchains")
+load("@aspect_rules_js//js:configure.bzl", "rules_js_configure")
 
-nodejs_register_toolchains(
-    name = "nodejs",
-    node_version = DEFAULT_NODE_VERSION,
-)
+rules_js_configure()
 
 load("@aspect_rules_js//npm:repositories.bzl", "npm_translate_lock")
 
diff --git a/e2e/npm_translate_package_lock/MODULE.bazel b/e2e/npm_translate_package_lock/MODULE.bazel
index cfb93b3..3c69b3c 100644
--- a/e2e/npm_translate_package_lock/MODULE.bazel
+++ b/e2e/npm_translate_package_lock/MODULE.bazel
@@ -12,6 +12,13 @@
     path = "../..",
 )
 
+archive_override(
+    module_name = "rules_nodejs",
+    integrity = "sha256-w7yMsYGMkgKhVZJizhmB9T668fGzdEvRXThptjTtnpo=",
+    strip_prefix = "rules_nodejs-d28957af10035c3030ffcb26ced95bb411a50692",
+    urls = ["https://github.com/bazelbuild/rules_nodejs/archive/d28957af10035c3030ffcb26ced95bb411a50692.tar.gz"],
+)
+
 npm = use_extension("@aspect_rules_js//npm:extensions.bzl", "npm")
 npm.npm_translate_lock(
     name = "npm",
diff --git a/e2e/npm_translate_package_lock/WORKSPACE b/e2e/npm_translate_package_lock/WORKSPACE
index c679ded..a1dba35 100644
--- a/e2e/npm_translate_package_lock/WORKSPACE
+++ b/e2e/npm_translate_package_lock/WORKSPACE
@@ -7,12 +7,9 @@
 
 rules_js_dependencies()
 
-load("@rules_nodejs//nodejs:repositories.bzl", "DEFAULT_NODE_VERSION", "nodejs_register_toolchains")
+load("@aspect_rules_js//js:configure.bzl", "rules_js_configure")
 
-nodejs_register_toolchains(
-    name = "nodejs",
-    node_version = DEFAULT_NODE_VERSION,
-)
+rules_js_configure()
 
 load("@aspect_rules_js//npm:repositories.bzl", "npm_translate_lock")
 
diff --git a/e2e/npm_translate_yarn_lock/MODULE.bazel b/e2e/npm_translate_yarn_lock/MODULE.bazel
index a963a45..e8499b6 100644
--- a/e2e/npm_translate_yarn_lock/MODULE.bazel
+++ b/e2e/npm_translate_yarn_lock/MODULE.bazel
@@ -12,6 +12,13 @@
     path = "../..",
 )
 
+archive_override(
+    module_name = "rules_nodejs",
+    integrity = "sha256-w7yMsYGMkgKhVZJizhmB9T668fGzdEvRXThptjTtnpo=",
+    strip_prefix = "rules_nodejs-d28957af10035c3030ffcb26ced95bb411a50692",
+    urls = ["https://github.com/bazelbuild/rules_nodejs/archive/d28957af10035c3030ffcb26ced95bb411a50692.tar.gz"],
+)
+
 pnpm = use_extension("@aspect_rules_js//npm:extensions.bzl", "pnpm")
 pnpm.pnpm(
     name = "pnpm-old-version",
diff --git a/e2e/npm_translate_yarn_lock/WORKSPACE b/e2e/npm_translate_yarn_lock/WORKSPACE
index f14e831..fccd508 100644
--- a/e2e/npm_translate_yarn_lock/WORKSPACE
+++ b/e2e/npm_translate_yarn_lock/WORKSPACE
@@ -7,12 +7,9 @@
 
 rules_js_dependencies()
 
-load("@rules_nodejs//nodejs:repositories.bzl", "DEFAULT_NODE_VERSION", "nodejs_register_toolchains")
+load("@aspect_rules_js//js:configure.bzl", "rules_js_configure")
 
-nodejs_register_toolchains(
-    name = "nodejs",
-    node_version = DEFAULT_NODE_VERSION,
-)
+rules_js_configure()
 
 load("@aspect_rules_js//npm:repositories.bzl", "npm_translate_lock")
 
diff --git a/e2e/package_json_module/MODULE.bazel b/e2e/package_json_module/MODULE.bazel
index e50d4f9..e190f5d 100644
--- a/e2e/package_json_module/MODULE.bazel
+++ b/e2e/package_json_module/MODULE.bazel
@@ -11,6 +11,13 @@
     path = "../..",
 )
 
+archive_override(
+    module_name = "rules_nodejs",
+    integrity = "sha256-w7yMsYGMkgKhVZJizhmB9T668fGzdEvRXThptjTtnpo=",
+    strip_prefix = "rules_nodejs-d28957af10035c3030ffcb26ced95bb411a50692",
+    urls = ["https://github.com/bazelbuild/rules_nodejs/archive/d28957af10035c3030ffcb26ced95bb411a50692.tar.gz"],
+)
+
 npm = use_extension("@aspect_rules_js//npm:extensions.bzl", "npm")
 npm.npm_translate_lock(
     name = "npm",
diff --git a/e2e/package_json_module/WORKSPACE b/e2e/package_json_module/WORKSPACE
index ea3ccba..ce9aad1 100644
--- a/e2e/package_json_module/WORKSPACE
+++ b/e2e/package_json_module/WORKSPACE
@@ -7,12 +7,9 @@
 
 rules_js_dependencies()
 
-load("@rules_nodejs//nodejs:repositories.bzl", "DEFAULT_NODE_VERSION", "nodejs_register_toolchains")
+load("@aspect_rules_js//js:configure.bzl", "rules_js_configure")
 
-nodejs_register_toolchains(
-    name = "nodejs",
-    node_version = DEFAULT_NODE_VERSION,
-)
+rules_js_configure()
 
 load("@aspect_rules_js//npm:repositories.bzl", "npm_translate_lock")
 
diff --git a/e2e/patch_from_repo/MODULE.bazel b/e2e/patch_from_repo/MODULE.bazel
index b59a59a..cfc7ee5 100644
--- a/e2e/patch_from_repo/MODULE.bazel
+++ b/e2e/patch_from_repo/MODULE.bazel
@@ -8,6 +8,13 @@
     path = "../..",
 )
 
+archive_override(
+    module_name = "rules_nodejs",
+    integrity = "sha256-w7yMsYGMkgKhVZJizhmB9T668fGzdEvRXThptjTtnpo=",
+    strip_prefix = "rules_nodejs-d28957af10035c3030ffcb26ced95bb411a50692",
+    urls = ["https://github.com/bazelbuild/rules_nodejs/archive/d28957af10035c3030ffcb26ced95bb411a50692.tar.gz"],
+)
+
 local_path_override(
     module_name = "local_repo",
     path = "./local_repo",
diff --git a/e2e/patch_from_repo/WORKSPACE b/e2e/patch_from_repo/WORKSPACE
index 1ccc9e8..4a553df 100644
--- a/e2e/patch_from_repo/WORKSPACE
+++ b/e2e/patch_from_repo/WORKSPACE
@@ -12,12 +12,9 @@
 
 rules_js_dependencies()
 
-load("@rules_nodejs//nodejs:repositories.bzl", "DEFAULT_NODE_VERSION", "nodejs_register_toolchains")
+load("@aspect_rules_js//js:configure.bzl", "rules_js_configure")
 
-nodejs_register_toolchains(
-    name = "nodejs",
-    node_version = DEFAULT_NODE_VERSION,
-)
+rules_js_configure()
 
 load("@aspect_rules_js//npm:repositories.bzl", "npm_translate_lock")
 
diff --git a/e2e/pnpm_repo_install/MODULE.bazel b/e2e/pnpm_repo_install/MODULE.bazel
index 7d9cdfa..c39fb5a 100644
--- a/e2e/pnpm_repo_install/MODULE.bazel
+++ b/e2e/pnpm_repo_install/MODULE.bazel
@@ -11,6 +11,13 @@
     path = "../..",
 )
 
+archive_override(
+    module_name = "rules_nodejs",
+    integrity = "sha256-w7yMsYGMkgKhVZJizhmB9T668fGzdEvRXThptjTtnpo=",
+    strip_prefix = "rules_nodejs-d28957af10035c3030ffcb26ced95bb411a50692",
+    urls = ["https://github.com/bazelbuild/rules_nodejs/archive/d28957af10035c3030ffcb26ced95bb411a50692.tar.gz"],
+)
+
 node = use_extension("@rules_nodejs//nodejs:extensions.bzl", "node")
 use_repo(node, "nodejs_toolchains")
 use_repo(node, "nodejs_darwin_amd64")
diff --git a/e2e/pnpm_repo_install/WORKSPACE b/e2e/pnpm_repo_install/WORKSPACE
index ea3ccba..ce9aad1 100644
--- a/e2e/pnpm_repo_install/WORKSPACE
+++ b/e2e/pnpm_repo_install/WORKSPACE
@@ -7,12 +7,9 @@
 
 rules_js_dependencies()
 
-load("@rules_nodejs//nodejs:repositories.bzl", "DEFAULT_NODE_VERSION", "nodejs_register_toolchains")
+load("@aspect_rules_js//js:configure.bzl", "rules_js_configure")
 
-nodejs_register_toolchains(
-    name = "nodejs",
-    node_version = DEFAULT_NODE_VERSION,
-)
+rules_js_configure()
 
 load("@aspect_rules_js//npm:repositories.bzl", "npm_translate_lock")
 
diff --git a/e2e/pnpm_workspace/MODULE.bazel b/e2e/pnpm_workspace/MODULE.bazel
index bc99a10..3b334ea 100644
--- a/e2e/pnpm_workspace/MODULE.bazel
+++ b/e2e/pnpm_workspace/MODULE.bazel
@@ -13,6 +13,13 @@
     path = "../..",
 )
 
+archive_override(
+    module_name = "rules_nodejs",
+    integrity = "sha256-w7yMsYGMkgKhVZJizhmB9T668fGzdEvRXThptjTtnpo=",
+    strip_prefix = "rules_nodejs-d28957af10035c3030ffcb26ced95bb411a50692",
+    urls = ["https://github.com/bazelbuild/rules_nodejs/archive/d28957af10035c3030ffcb26ced95bb411a50692.tar.gz"],
+)
+
 node = use_extension("@rules_nodejs//nodejs:extensions.bzl", "node")
 use_repo(node, "nodejs_toolchains")
 use_repo(node, "nodejs_darwin_amd64")
diff --git a/e2e/pnpm_workspace/WORKSPACE b/e2e/pnpm_workspace/WORKSPACE
index dd33ea1..3647d6e 100644
--- a/e2e/pnpm_workspace/WORKSPACE
+++ b/e2e/pnpm_workspace/WORKSPACE
@@ -20,12 +20,9 @@
 
 rules_js_dependencies()
 
-load("@rules_nodejs//nodejs:repositories.bzl", "DEFAULT_NODE_VERSION", "nodejs_register_toolchains")
+load("@aspect_rules_js//js:configure.bzl", "rules_js_configure")
 
-nodejs_register_toolchains(
-    name = "nodejs",
-    node_version = DEFAULT_NODE_VERSION,
-)
+rules_js_configure()
 
 load("@aspect_rules_js//npm:repositories.bzl", "npm_translate_lock")
 
diff --git a/e2e/pnpm_workspace_deps/MODULE.bazel b/e2e/pnpm_workspace_deps/MODULE.bazel
index 1943f8c..fdce9b2 100644
--- a/e2e/pnpm_workspace_deps/MODULE.bazel
+++ b/e2e/pnpm_workspace_deps/MODULE.bazel
@@ -11,6 +11,13 @@
     path = "../..",
 )
 
+archive_override(
+    module_name = "rules_nodejs",
+    integrity = "sha256-w7yMsYGMkgKhVZJizhmB9T668fGzdEvRXThptjTtnpo=",
+    strip_prefix = "rules_nodejs-d28957af10035c3030ffcb26ced95bb411a50692",
+    urls = ["https://github.com/bazelbuild/rules_nodejs/archive/d28957af10035c3030ffcb26ced95bb411a50692.tar.gz"],
+)
+
 npm = use_extension("@aspect_rules_js//npm:extensions.bzl", "npm")
 npm.npm_translate_lock(
     name = "npm",
diff --git a/e2e/pnpm_workspace_deps/WORKSPACE b/e2e/pnpm_workspace_deps/WORKSPACE
index aaeb000..3918784 100644
--- a/e2e/pnpm_workspace_deps/WORKSPACE
+++ b/e2e/pnpm_workspace_deps/WORKSPACE
@@ -20,12 +20,9 @@
 
 rules_js_dependencies()
 
-load("@rules_nodejs//nodejs:repositories.bzl", "DEFAULT_NODE_VERSION", "nodejs_register_toolchains")
+load("@aspect_rules_js//js:configure.bzl", "rules_js_configure")
 
-nodejs_register_toolchains(
-    name = "nodejs",
-    node_version = DEFAULT_NODE_VERSION,
-)
+rules_js_configure()
 
 load("@aspect_rules_js//npm:repositories.bzl", "npm_translate_lock")
 
diff --git a/e2e/pnpm_workspace_rerooted/MODULE.bazel b/e2e/pnpm_workspace_rerooted/MODULE.bazel
index a7e77bf..e58cfb9 100644
--- a/e2e/pnpm_workspace_rerooted/MODULE.bazel
+++ b/e2e/pnpm_workspace_rerooted/MODULE.bazel
@@ -12,6 +12,13 @@
     path = "../..",
 )
 
+archive_override(
+    module_name = "rules_nodejs",
+    integrity = "sha256-w7yMsYGMkgKhVZJizhmB9T668fGzdEvRXThptjTtnpo=",
+    strip_prefix = "rules_nodejs-d28957af10035c3030ffcb26ced95bb411a50692",
+    urls = ["https://github.com/bazelbuild/rules_nodejs/archive/d28957af10035c3030ffcb26ced95bb411a50692.tar.gz"],
+)
+
 node = use_extension("@rules_nodejs//nodejs:extensions.bzl", "node")
 node.toolchain(
     name = "nodejs",
diff --git a/e2e/pnpm_workspace_rerooted/WORKSPACE b/e2e/pnpm_workspace_rerooted/WORKSPACE
index 1245ca4..03313e9 100644
--- a/e2e/pnpm_workspace_rerooted/WORKSPACE
+++ b/e2e/pnpm_workspace_rerooted/WORKSPACE
@@ -7,12 +7,9 @@
 
 rules_js_dependencies()
 
-load("@rules_nodejs//nodejs:repositories.bzl", "nodejs_register_toolchains")
+load("@aspect_rules_js//js:configure.bzl", "rules_js_configure")
 
-nodejs_register_toolchains(
-    name = "nodejs",
-    node_version = "16.14.2",
-)
+rules_js_configure(node_version = "16.14.2")
 
 load("@aspect_rules_js//npm:repositories.bzl", "npm_translate_lock")
 
diff --git a/e2e/rules_foo/WORKSPACE b/e2e/rules_foo/WORKSPACE
index 4a82155..a2ca683 100644
--- a/e2e/rules_foo/WORKSPACE
+++ b/e2e/rules_foo/WORKSPACE
@@ -10,12 +10,9 @@
 
 rules_js_dependencies()
 
-load("@rules_nodejs//nodejs:repositories.bzl", "nodejs_register_toolchains")
+load("@aspect_rules_js//js:configure.bzl", "rules_js_configure")
 
-nodejs_register_toolchains(
-    name = "nodejs",
-    node_version = "16.14.2",
-)
+rules_js_configure(node_version = "16.14.2")
 
 load("@rules_foo//foo:repositories.bzl", "foo_repositories")
 
diff --git a/e2e/stamped_package_json/MODULE.bazel b/e2e/stamped_package_json/MODULE.bazel
index 47783e1..300b5fc 100644
--- a/e2e/stamped_package_json/MODULE.bazel
+++ b/e2e/stamped_package_json/MODULE.bazel
@@ -10,3 +10,10 @@
     module_name = "aspect_rules_js",
     path = "../..",
 )
+
+archive_override(
+    module_name = "rules_nodejs",
+    integrity = "sha256-w7yMsYGMkgKhVZJizhmB9T668fGzdEvRXThptjTtnpo=",
+    strip_prefix = "rules_nodejs-d28957af10035c3030ffcb26ced95bb411a50692",
+    urls = ["https://github.com/bazelbuild/rules_nodejs/archive/d28957af10035c3030ffcb26ced95bb411a50692.tar.gz"],
+)
diff --git a/e2e/stamped_package_json/WORKSPACE b/e2e/stamped_package_json/WORKSPACE
index 568e0f5..f9c2003 100644
--- a/e2e/stamped_package_json/WORKSPACE
+++ b/e2e/stamped_package_json/WORKSPACE
@@ -7,6 +7,6 @@
 
 rules_js_dependencies()
 
-load("@aspect_bazel_lib//lib:repositories.bzl", "register_jq_toolchains")
+load("@aspect_rules_js//js:configure.bzl", "rules_js_configure")
 
-register_jq_toolchains()
+rules_js_configure()
diff --git a/e2e/update_pnpm_lock/MODULE.bazel b/e2e/update_pnpm_lock/MODULE.bazel
index 665bfe9..faf5339 100644
--- a/e2e/update_pnpm_lock/MODULE.bazel
+++ b/e2e/update_pnpm_lock/MODULE.bazel
@@ -12,6 +12,13 @@
     path = "../..",
 )
 
+archive_override(
+    module_name = "rules_nodejs",
+    integrity = "sha256-w7yMsYGMkgKhVZJizhmB9T668fGzdEvRXThptjTtnpo=",
+    strip_prefix = "rules_nodejs-d28957af10035c3030ffcb26ced95bb411a50692",
+    urls = ["https://github.com/bazelbuild/rules_nodejs/archive/d28957af10035c3030ffcb26ced95bb411a50692.tar.gz"],
+)
+
 npm = use_extension("@aspect_rules_js//npm:extensions.bzl", "npm")
 npm.npm_translate_lock(
     name = "npm",
diff --git a/e2e/update_pnpm_lock/WORKSPACE b/e2e/update_pnpm_lock/WORKSPACE
index 144abdb..b2b8dac 100644
--- a/e2e/update_pnpm_lock/WORKSPACE
+++ b/e2e/update_pnpm_lock/WORKSPACE
@@ -7,12 +7,9 @@
 
 rules_js_dependencies()
 
-load("@rules_nodejs//nodejs:repositories.bzl", "DEFAULT_NODE_VERSION", "nodejs_register_toolchains")
+load("@aspect_rules_js//js:configure.bzl", "rules_js_configure")
 
-nodejs_register_toolchains(
-    name = "nodejs",
-    node_version = DEFAULT_NODE_VERSION,
-)
+rules_js_configure()
 
 load("@aspect_rules_js//npm:repositories.bzl", "npm_translate_lock")
 
diff --git a/e2e/update_pnpm_lock_with_import/MODULE.bazel b/e2e/update_pnpm_lock_with_import/MODULE.bazel
index 0c823fa..6c2b892 100644
--- a/e2e/update_pnpm_lock_with_import/MODULE.bazel
+++ b/e2e/update_pnpm_lock_with_import/MODULE.bazel
@@ -12,6 +12,13 @@
     path = "../..",
 )
 
+archive_override(
+    module_name = "rules_nodejs",
+    integrity = "sha256-w7yMsYGMkgKhVZJizhmB9T668fGzdEvRXThptjTtnpo=",
+    strip_prefix = "rules_nodejs-d28957af10035c3030ffcb26ced95bb411a50692",
+    urls = ["https://github.com/bazelbuild/rules_nodejs/archive/d28957af10035c3030ffcb26ced95bb411a50692.tar.gz"],
+)
+
 npm = use_extension("@aspect_rules_js//npm:extensions.bzl", "npm")
 
 # Validate that we can use a yarn.lock file in place of pnpm-lock.yaml
diff --git a/e2e/update_pnpm_lock_with_import/WORKSPACE b/e2e/update_pnpm_lock_with_import/WORKSPACE
index 9d2b79e..ec61b56 100644
--- a/e2e/update_pnpm_lock_with_import/WORKSPACE
+++ b/e2e/update_pnpm_lock_with_import/WORKSPACE
@@ -7,12 +7,9 @@
 
 rules_js_dependencies()
 
-load("@rules_nodejs//nodejs:repositories.bzl", "DEFAULT_NODE_VERSION", "nodejs_register_toolchains")
+load("@aspect_rules_js//js:configure.bzl", "rules_js_configure")
 
-nodejs_register_toolchains(
-    name = "nodejs",
-    node_version = DEFAULT_NODE_VERSION,
-)
+rules_js_configure()
 
 load("@aspect_rules_js//npm:repositories.bzl", "npm_translate_lock")
 
diff --git a/e2e/vendored_node/MODULE.bazel b/e2e/vendored_node/MODULE.bazel
index 9edb4ac..ae58749 100644
--- a/e2e/vendored_node/MODULE.bazel
+++ b/e2e/vendored_node/MODULE.bazel
@@ -14,4 +14,11 @@
     path = "../..",
 )
 
+archive_override(
+    module_name = "rules_nodejs",
+    integrity = "sha256-w7yMsYGMkgKhVZJizhmB9T668fGzdEvRXThptjTtnpo=",
+    strip_prefix = "rules_nodejs-d28957af10035c3030ffcb26ced95bb411a50692",
+    urls = ["https://github.com/bazelbuild/rules_nodejs/archive/d28957af10035c3030ffcb26ced95bb411a50692.tar.gz"],
+)
+
 register_toolchains("//toolchains:all")
diff --git a/e2e/vendored_node/WORKSPACE b/e2e/vendored_node/WORKSPACE
index bf9bddb..a9743de 100644
--- a/e2e/vendored_node/WORKSPACE
+++ b/e2e/vendored_node/WORKSPACE
@@ -7,9 +7,9 @@
 
 rules_js_dependencies()
 
-load("@bazel_features//:deps.bzl", "bazel_features_deps")
+load("@aspect_rules_js//js:configure.bzl", "rules_js_configure")
 
-bazel_features_deps()
+rules_js_configure(register_nodejs_toolchain = False)
 
 load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
 
diff --git a/e2e/vendored_node/toolchains/BUILD.bazel b/e2e/vendored_node/toolchains/BUILD.bazel
index 6e439e7..afb898f 100644
--- a/e2e/vendored_node/toolchains/BUILD.bazel
+++ b/e2e/vendored_node/toolchains/BUILD.bazel
@@ -11,7 +11,7 @@
 
 [
     toolchain(
-        name = "node15_%s_toolchain" % os,
+        name = "node_vendored_%s_toolchain" % os,
         exec_compatible_with = [
             "@platforms//os:" + os,
             "@platforms//cpu:x86_64",
@@ -28,15 +28,15 @@
 
 node_toolchain(
     name = "node_linux",
-    target_tool = "@vendored_node_linux_amd64//:bin/node",
+    node = "@vendored_node_linux_amd64//:bin/node",
 )
 
 node_toolchain(
     name = "node_macos",
-    target_tool = "@vendored_node_darwin_amd64//:bin/node",
+    node = "@vendored_node_darwin_amd64//:bin/node",
 )
 
 node_toolchain(
     name = "node_windows",
-    target_tool = "@vendored_node_windows_amd64//:node.exe",
+    node = "@vendored_node_windows_amd64//:node.exe",
 )
diff --git a/e2e/vendored_tarfile/MODULE.bazel b/e2e/vendored_tarfile/MODULE.bazel
index b8b4c53..035c654 100644
--- a/e2e/vendored_tarfile/MODULE.bazel
+++ b/e2e/vendored_tarfile/MODULE.bazel
@@ -12,6 +12,13 @@
     path = "../..",
 )
 
+archive_override(
+    module_name = "rules_nodejs",
+    integrity = "sha256-w7yMsYGMkgKhVZJizhmB9T668fGzdEvRXThptjTtnpo=",
+    strip_prefix = "rules_nodejs-d28957af10035c3030ffcb26ced95bb411a50692",
+    urls = ["https://github.com/bazelbuild/rules_nodejs/archive/d28957af10035c3030ffcb26ced95bb411a50692.tar.gz"],
+)
+
 npm = use_extension("@aspect_rules_js//npm:extensions.bzl", "npm")
 npm.npm_translate_lock(
     name = "npm",
diff --git a/e2e/vendored_tarfile/WORKSPACE b/e2e/vendored_tarfile/WORKSPACE
index 4c75f2c..08c0c91 100644
--- a/e2e/vendored_tarfile/WORKSPACE
+++ b/e2e/vendored_tarfile/WORKSPACE
@@ -7,12 +7,9 @@
 
 rules_js_dependencies()
 
-load("@rules_nodejs//nodejs:repositories.bzl", "DEFAULT_NODE_VERSION", "nodejs_register_toolchains")
+load("@aspect_rules_js//js:configure.bzl", "rules_js_configure")
 
-nodejs_register_toolchains(
-    name = "nodejs",
-    node_version = DEFAULT_NODE_VERSION,
-)
+rules_js_configure()
 
 load("@aspect_rules_js//npm:repositories.bzl", "npm_translate_lock")
 
diff --git a/e2e/verify_patches/MODULE.bazel b/e2e/verify_patches/MODULE.bazel
index 41b0f53..716b319 100644
--- a/e2e/verify_patches/MODULE.bazel
+++ b/e2e/verify_patches/MODULE.bazel
@@ -12,6 +12,13 @@
     path = "../..",
 )
 
+archive_override(
+    module_name = "rules_nodejs",
+    integrity = "sha256-w7yMsYGMkgKhVZJizhmB9T668fGzdEvRXThptjTtnpo=",
+    strip_prefix = "rules_nodejs-d28957af10035c3030ffcb26ced95bb411a50692",
+    urls = ["https://github.com/bazelbuild/rules_nodejs/archive/d28957af10035c3030ffcb26ced95bb411a50692.tar.gz"],
+)
+
 npm = use_extension("@aspect_rules_js//npm:extensions.bzl", "npm")
 npm.npm_translate_lock(
     name = "npm",
diff --git a/e2e/verify_patches/WORKSPACE b/e2e/verify_patches/WORKSPACE
index 1e7cc86..a00aa0d 100644
--- a/e2e/verify_patches/WORKSPACE
+++ b/e2e/verify_patches/WORKSPACE
@@ -7,12 +7,9 @@
 
 rules_js_dependencies()
 
-load("@rules_nodejs//nodejs:repositories.bzl", "DEFAULT_NODE_VERSION", "nodejs_register_toolchains")
+load("@aspect_rules_js//js:configure.bzl", "rules_js_configure")
 
-nodejs_register_toolchains(
-    name = "nodejs",
-    node_version = DEFAULT_NODE_VERSION,
-)
+rules_js_configure()
 
 load("@aspect_rules_js//npm:repositories.bzl", "npm_translate_lock")
 
diff --git a/e2e/webpack_devserver/MODULE.bazel b/e2e/webpack_devserver/MODULE.bazel
index 31b71c3..769e6b4 100644
--- a/e2e/webpack_devserver/MODULE.bazel
+++ b/e2e/webpack_devserver/MODULE.bazel
@@ -7,6 +7,13 @@
     path = "../..",
 )
 
+archive_override(
+    module_name = "rules_nodejs",
+    integrity = "sha256-w7yMsYGMkgKhVZJizhmB9T668fGzdEvRXThptjTtnpo=",
+    strip_prefix = "rules_nodejs-d28957af10035c3030ffcb26ced95bb411a50692",
+    urls = ["https://github.com/bazelbuild/rules_nodejs/archive/d28957af10035c3030ffcb26ced95bb411a50692.tar.gz"],
+)
+
 npm = use_extension("@aspect_rules_js//npm:extensions.bzl", "npm")
 npm.npm_translate_lock(
     name = "npm",
diff --git a/e2e/webpack_devserver/WORKSPACE b/e2e/webpack_devserver/WORKSPACE
index afeb53a..61814fa 100644
--- a/e2e/webpack_devserver/WORKSPACE
+++ b/e2e/webpack_devserver/WORKSPACE
@@ -7,12 +7,9 @@
 
 rules_js_dependencies()
 
-load("@rules_nodejs//nodejs:repositories.bzl", "DEFAULT_NODE_VERSION", "nodejs_register_toolchains")
+load("@aspect_rules_js//js:configure.bzl", "rules_js_configure")
 
-nodejs_register_toolchains(
-    name = "nodejs",
-    node_version = DEFAULT_NODE_VERSION,
-)
+rules_js_configure()
 
 load("@aspect_rules_js//npm:repositories.bzl", "npm_translate_lock")
 
diff --git a/e2e/webpack_devserver_esm/MODULE.bazel b/e2e/webpack_devserver_esm/MODULE.bazel
index 74621c6..35fe8d2 100644
--- a/e2e/webpack_devserver_esm/MODULE.bazel
+++ b/e2e/webpack_devserver_esm/MODULE.bazel
@@ -7,6 +7,13 @@
     path = "../..",
 )
 
+archive_override(
+    module_name = "rules_nodejs",
+    integrity = "sha256-w7yMsYGMkgKhVZJizhmB9T668fGzdEvRXThptjTtnpo=",
+    strip_prefix = "rules_nodejs-d28957af10035c3030ffcb26ced95bb411a50692",
+    urls = ["https://github.com/bazelbuild/rules_nodejs/archive/d28957af10035c3030ffcb26ced95bb411a50692.tar.gz"],
+)
+
 npm = use_extension("@aspect_rules_js//npm:extensions.bzl", "npm")
 npm.npm_translate_lock(
     name = "npm",
diff --git a/e2e/webpack_devserver_esm/WORKSPACE b/e2e/webpack_devserver_esm/WORKSPACE
index afeb53a..61814fa 100644
--- a/e2e/webpack_devserver_esm/WORKSPACE
+++ b/e2e/webpack_devserver_esm/WORKSPACE
@@ -7,12 +7,9 @@
 
 rules_js_dependencies()
 
-load("@rules_nodejs//nodejs:repositories.bzl", "DEFAULT_NODE_VERSION", "nodejs_register_toolchains")
+load("@aspect_rules_js//js:configure.bzl", "rules_js_configure")
 
-nodejs_register_toolchains(
-    name = "nodejs",
-    node_version = DEFAULT_NODE_VERSION,
-)
+rules_js_configure()
 
 load("@aspect_rules_js//npm:repositories.bzl", "npm_translate_lock")
 
diff --git a/e2e/worker/MODULE.bazel b/e2e/worker/MODULE.bazel
index 5761643..30751c5 100644
--- a/e2e/worker/MODULE.bazel
+++ b/e2e/worker/MODULE.bazel
@@ -11,6 +11,13 @@
     path = "../..",
 )
 
+archive_override(
+    module_name = "rules_nodejs",
+    integrity = "sha256-w7yMsYGMkgKhVZJizhmB9T668fGzdEvRXThptjTtnpo=",
+    strip_prefix = "rules_nodejs-d28957af10035c3030ffcb26ced95bb411a50692",
+    urls = ["https://github.com/bazelbuild/rules_nodejs/archive/d28957af10035c3030ffcb26ced95bb411a50692.tar.gz"],
+)
+
 node = use_extension("@rules_nodejs//nodejs:extensions.bzl", "node")
 use_repo(node, "nodejs_toolchains")
 use_repo(node, "nodejs_darwin_amd64")
diff --git a/e2e/worker/WORKSPACE b/e2e/worker/WORKSPACE
index fd70c11..267b700 100644
--- a/e2e/worker/WORKSPACE
+++ b/e2e/worker/WORKSPACE
@@ -7,14 +7,7 @@
 
 rules_js_dependencies()
 
-load("@rules_nodejs//nodejs:repositories.bzl", "nodejs_register_toolchains")
+load("@aspect_rules_js//js:configure.bzl", "rules_js_configure")
 
-nodejs_register_toolchains(
-    name = "nodejs",
-    # nodejs 14 is used intentionally here, to assert AbortController polyfill is installed properly.
-    node_version = "14.20.0",
-)
-
-load("@bazel_features//:deps.bzl", "bazel_features_deps")
-
-bazel_features_deps()
+# nodejs 14 is used intentionally here, to assert AbortController polyfill is installed properly.
+rules_js_configure(node_version = "14.20.0")
diff --git a/e2e/workspace/WORKSPACE b/e2e/workspace/WORKSPACE
index 6b21dcb..eb33107 100644
--- a/e2e/workspace/WORKSPACE
+++ b/e2e/workspace/WORKSPACE
@@ -9,17 +9,9 @@
 
 rules_js_dependencies()
 
-load("@rules_nodejs//nodejs:repositories.bzl", "DEFAULT_NODE_VERSION", "nodejs_register_toolchains")
+load("@aspect_rules_js//js:configure.bzl", "DEFAULT_NODE_VERSION", "rules_js_configure")
 
-nodejs_register_toolchains(
-    name = "nodejs",
-    node_version = DEFAULT_NODE_VERSION,
-)
-
-# For convenience, npm_translate_lock does this call automatically.
-# Uncomment if you don't call npm_translate_lock at all.
-#load("@bazel_features//:deps.bzl", "bazel_features_deps")
-#bazel_features_deps()
+rules_js_configure(node_version = DEFAULT_NODE_VERSION)
 
 load("@aspect_rules_js//npm:repositories.bzl", "npm_translate_lock")
 
diff --git a/js/configure.bzl b/js/configure.bzl
new file mode 100644
index 0000000..e628542
--- /dev/null
+++ b/js/configure.bzl
@@ -0,0 +1,84 @@
+"""Configures transitive deps and registers toolchains required by rules_js.
+"""
+
+load(
+    "@aspect_bazel_lib//lib:repositories.bzl",
+    _register_copy_directory_toolchains = "register_copy_directory_toolchains",
+    _register_copy_to_directory_toolchains = "register_copy_to_directory_toolchains",
+    _register_coreutils_toolchains = "register_coreutils_toolchains",
+    _register_jq_toolchains = "register_jq_toolchains",
+    _register_tar_toolchains = "register_tar_toolchains",
+    _register_yq_toolchains = "register_yq_toolchains",
+)
+load("@bazel_features//:deps.bzl", "bazel_features_deps")
+load("@rules_nodejs//nodejs:repositories.bzl", "nodejs_register_toolchains", _DEFAULT_NODE_REPOSITORY = "DEFAULT_NODE_REPOSITORY", _DEFAULT_NODE_VERSION = "DEFAULT_NODE_VERSION")
+
+DEFAULT_NODE_REPOSITORY = _DEFAULT_NODE_REPOSITORY
+DEFAULT_NODE_VERSION = _DEFAULT_NODE_VERSION
+
+def rules_js_configure(
+        node_download_auth = {},
+        node_repositories = {},
+        node_urls = None,
+        node_version = DEFAULT_NODE_VERSION,
+        node_version_from_nvmrc = None,
+        **kwargs):
+    """Configures transitive deps and toolchains required by rules_js.
+
+    Node.js toolchain comes from [rules_nodejs](https://docs.aspect.build/rulesets/rules_nodejs).
+    For more details on Node.js toolchain registration see
+    https://docs.aspect.build/rulesets/rules_nodejs/docs/core#node_repositories.
+
+    Additional required toolchains (jq, yq, copy_directory and copy_to_directory) come
+    from [Aspect bazel-lib](https://docs.aspect.build/rulesets/aspect_bazel_lib).
+
+    Args:
+        node_download_auth: Auth to use for all url requests when downloading Node
+
+            Example: {"type": "basic", "login": "<UserName>", "password": "<Password>" }
+
+        node_repositories: Custom list of node repositories to use
+
+            A dictionary mapping NodeJS versions to sets of hosts and their corresponding (filename, strip_prefix, sha256) tuples.
+            You should list a node binary for every platform users have, likely Mac, Windows, and Linux.
+
+            By default, if this attribute has no items, we'll use a list of all public NodeJS releases.
+
+        node_urls: Custom list of URLs to use to download NodeJS
+
+            Each entry is a template for downloading a node distribution.
+
+            The `{version}` parameter is substituted with the `node_version` attribute,
+            and `{filename}` with the matching entry from the `node_repositories` attribute.
+
+        node_version: The specific version of NodeJS to install
+
+        node_version_from_nvmrc: The label of the .nvmrc file containing the version of node
+
+            If set then the version is set to the version found in the .nvmrc file.
+
+        **kwargs: Other args
+    """
+    bazel_features_deps()
+
+    if kwargs.pop("register_copy_directory_toolchain", True) and not native.existing_rule("copy_directory_toolchains"):
+        _register_copy_directory_toolchains()
+    if kwargs.pop("register_copy_to_directory_toolchain", True) and not native.existing_rule("copy_to_directory_toolchains"):
+        _register_copy_to_directory_toolchains()
+    if kwargs.pop("register_coreutils_toolchain", True) and not native.existing_rule("coreutils_toolchains"):
+        _register_coreutils_toolchains()
+    if kwargs.pop("register_jq_toolchain", True) and not native.existing_rule("jq_toolchains"):
+        _register_jq_toolchains()
+    if kwargs.pop("register_tar_toolchain", True) and not native.existing_rule("tar_toolchains"):
+        _register_tar_toolchains()
+    if kwargs.pop("register_yq_toolchain", True) and not native.existing_rule("yq_toolchains"):
+        _register_yq_toolchains()
+    if kwargs.pop("register_nodejs_toolchain", True) and not native.existing_rule("{}_toolchains".format(DEFAULT_NODE_REPOSITORY)):
+        nodejs_register_toolchains(
+            name = DEFAULT_NODE_REPOSITORY,
+            node_download_auth = node_download_auth,
+            node_repositories = node_repositories,
+            node_urls = node_urls,
+            node_version = node_version,
+            node_version_from_nvmrc = node_version_from_nvmrc,
+        )
diff --git a/js/private/coverage/merger.bzl b/js/private/coverage/merger.bzl
index b1d3ba8..b97e278 100644
--- a/js/private/coverage/merger.bzl
+++ b/js/private/coverage/merger.bzl
@@ -13,27 +13,19 @@
     "_windows_constraint": attr.label(default = "@platforms//os:windows"),
 }
 
-# Do the opposite of _to_manifest_path in
-# https://github.com/bazelbuild/rules_nodejs/blob/8b5d27400db51e7027fe95ae413eeabea4856f8e/nodejs/toolchain.bzl#L50
-# to get back to the short_path.
-# TODO(2.0): fix toolchain so we don't have to do this
-def _target_tool_path_to_short_path(tool_path):
-    return ("../" + tool_path[len("external/"):]) if tool_path.startswith("external/") else tool_path
-
 def _coverage_merger_impl(ctx):
     is_windows = ctx.target_platform_has_constraint(ctx.attr._windows_constraint[platform_common.ConstraintValueInfo])
-    node_bin = ctx.toolchains["@rules_nodejs//nodejs:toolchain_type"].nodeinfo
+    nodeinfo = ctx.toolchains["@rules_nodejs//nodejs:toolchain_type"].nodeinfo
 
     # Create launcher
     bash_launcher = ctx.actions.declare_file(ctx.label.name)
-    node_path = _target_tool_path_to_short_path(ctx.toolchains["@rules_nodejs//nodejs:toolchain_type"].nodeinfo.target_tool_path)
     ctx.actions.expand_template(
         template = ctx.file._launcher_template,
         output = bash_launcher,
         substitutions = {
             "{{entry_point_path}}": ctx.file.entry_point.short_path,
             "{{initialize_js_binary_runfiles}}": BASH_INITIALIZE_JS_BINARY_RUNFILES,
-            "{{node}}": node_path,
+            "{{node}}": nodeinfo.node.short_path if nodeinfo.node else nodeinfo.node_path,
             "{{workspace_name}}": ctx.workspace_name,
         },
         is_executable = True,
@@ -41,13 +33,13 @@
 
     launcher = create_windows_native_launcher_script(ctx, bash_launcher) if is_windows else bash_launcher
 
-    runfiles = ctx.runfiles(
-        files = [ctx.file.entry_point] + node_bin.tool_files,
-    )
+    runfiles = [ctx.file.entry_point]
+    if nodeinfo.node:
+        runfiles.append(nodeinfo.node)
 
     return DefaultInfo(
         executable = launcher,
-        runfiles = runfiles,
+        runfiles = ctx.runfiles(files = runfiles),
     )
 
 coverage_merger = rule(
diff --git a/js/private/js_binary.bzl b/js/private/js_binary.bzl
index fd2412b..dc1d0f1 100644
--- a/js/private/js_binary.bzl
+++ b/js/private/js_binary.bzl
@@ -301,14 +301,7 @@
 _ENV_SET_IFF_NOT_SET = """if [[ -z "${{{var}:-}}" ]]; then export {var}=\"{value}\"; fi"""
 _NODE_OPTION = """JS_BINARY__NODE_OPTIONS+=(\"{value}\")"""
 
-# Do the opposite of _to_manifest_path in
-# https://github.com/bazelbuild/rules_nodejs/blob/8b5d27400db51e7027fe95ae413eeabea4856f8e/nodejs/toolchain.bzl#L50
-# to get back to the short_path.
-# TODO(2.0): fix toolchain so we don't have to do this
-def _target_tool_path_to_short_path(tool_path):
-    return ("../" + tool_path[len("external/"):]) if tool_path.startswith("external/") else tool_path
-
-def _bash_launcher(ctx, node_toolchain, entry_point_path, log_prefix_rule_set, log_prefix_rule, fixed_args, fixed_env, is_windows):
+def _bash_launcher(ctx, nodeinfo, entry_point_path, log_prefix_rule_set, log_prefix_rule, fixed_args, fixed_env, is_windows):
     # Explicitly disable node fs patches on Windows:
     # https://github.com/aspect-build/rules_js/issues/1137
     if is_windows:
@@ -406,7 +399,7 @@
 
     npm_path = ""
     if ctx.attr.include_npm:
-        npm_path = _target_tool_path_to_short_path(node_toolchain.nodeinfo.npm_path)
+        npm_path = nodeinfo.npm.short_path if nodeinfo.npm else nodeinfo.npm_path
         if is_windows:
             npm_wrapper = ctx.actions.declare_file("%s_node_bin/npm.bat" % ctx.label.name)
             ctx.actions.expand_template(
@@ -425,8 +418,6 @@
             )
         toolchain_files.append(npm_wrapper)
 
-    node_path = _target_tool_path_to_short_path(node_toolchain.nodeinfo.target_tool_path)
-
     launcher_subst = {
         "{{target_label}}": str(ctx.label),
         "{{template_label}}": str(ctx.attr._launcher_template.label),
@@ -440,7 +431,7 @@
         "{{node_options}}": "\n".join(node_options),
         "{{node_patches}}": ctx.file._node_patches.short_path,
         "{{node_wrapper}}": node_wrapper.short_path,
-        "{{node}}": node_path,
+        "{{node}}": nodeinfo.node.short_path if nodeinfo.node else nodeinfo.node_path,
         "{{npm}}": npm_path,
         "{{workspace_name}}": ctx.workspace_name,
     }
@@ -459,12 +450,9 @@
     is_windows = ctx.target_platform_has_constraint(ctx.attr._windows_constraint[platform_common.ConstraintValueInfo])
 
     if ctx.attr.node_toolchain:
-        node_toolchain = ctx.attr.node_toolchain[platform_common.ToolchainInfo]
+        nodeinfo = ctx.attr.node_toolchain[platform_common.ToolchainInfo].nodeinfo
     else:
-        node_toolchain = ctx.toolchains["@rules_nodejs//nodejs:toolchain_type"]
-
-    if ctx.attr.include_npm and not hasattr(node_toolchain.nodeinfo, "npm_files"):
-        fail("include_npm requires a minimum @rules_nodejs version of 5.7.0")
+        nodeinfo = ctx.toolchains["@rules_nodejs//nodejs:toolchain_type"].nodeinfo
 
     if DirectoryPathInfo in ctx.attr.entry_point:
         entry_point = ctx.attr.entry_point[DirectoryPathInfo].directory
@@ -478,14 +466,14 @@
         entry_point = ctx.files.entry_point[0]
         entry_point_path = entry_point.short_path
 
-    bash_launcher, toolchain_files = _bash_launcher(ctx, node_toolchain, entry_point_path, log_prefix_rule_set, log_prefix_rule, fixed_args, fixed_env, is_windows)
+    bash_launcher, toolchain_files = _bash_launcher(ctx, nodeinfo, entry_point_path, log_prefix_rule_set, log_prefix_rule, fixed_args, fixed_env, is_windows)
     launcher = create_windows_native_launcher_script(ctx, bash_launcher) if is_windows else bash_launcher
 
-    launcher_files = [bash_launcher] + toolchain_files
+    launcher_files = [bash_launcher]
+    launcher_files.extend(toolchain_files)
+    if nodeinfo.node:
+        launcher_files.append(nodeinfo.node)
     launcher_files.extend(ctx.files._node_patches_files + [ctx.file._node_patches])
-    launcher_files.extend(node_toolchain.nodeinfo.tool_files)
-    if ctx.attr.include_npm:
-        launcher_files.extend(node_toolchain.nodeinfo.npm_files)
 
     runfiles = gather_runfiles(
         ctx = ctx,
@@ -498,7 +486,10 @@
         include_transitive_sources = ctx.attr.include_transitive_sources,
         include_declarations = ctx.attr.include_declarations,
         include_npm_linked_packages = ctx.attr.include_npm_linked_packages,
-    ).merge(ctx.runfiles(files = launcher_files))
+    ).merge(ctx.runfiles(
+        files = launcher_files,
+        transitive_files = nodeinfo.npm_files if ctx.attr.include_npm else None,
+    ))
 
     return struct(
         executable = launcher,
diff --git a/js/repositories.bzl b/js/repositories.bzl
index 809eae9..bab4ba2 100644
--- a/js/repositories.bzl
+++ b/js/repositories.bzl
@@ -16,9 +16,12 @@
 
     http_archive(
         name = "rules_nodejs",
-        sha256 = "a50986c7d2f2dc43a5b9b81a6245fd89bdc4866f1d5e316d9cef2782dd859292",
-        strip_prefix = "rules_nodejs-6.0.5",
-        url = "https://github.com/bazelbuild/rules_nodejs/releases/download/v6.0.5/rules_nodejs-v6.0.5.tar.gz",
+        integrity = "sha256-w7yMsYGMkgKhVZJizhmB9T668fGzdEvRXThptjTtnpo=",
+        strip_prefix = "rules_nodejs-d28957af10035c3030ffcb26ced95bb411a50692",
+        url = "https://github.com/bazelbuild/rules_nodejs/archive/d28957af10035c3030ffcb26ced95bb411a50692.tar.gz",
+        # sha256 = "a50986c7d2f2dc43a5b9b81a6245fd89bdc4866f1d5e316d9cef2782dd859292",
+        # strip_prefix = "rules_nodejs-6.0.5",
+        # url = "https://github.com/bazelbuild/rules_nodejs/releases/download/v6.0.5/rules_nodejs-v6.0.5.tar.gz",
     )
 
     http_archive(
diff --git a/npm/extensions.bzl b/npm/extensions.bzl
index e842710..f9e7662 100644
--- a/npm/extensions.bzl
+++ b/npm/extensions.bzl
@@ -46,11 +46,6 @@
                 prod = attr.prod,
                 public_hoist_packages = attr.public_hoist_packages,
                 quiet = attr.quiet,
-                register_copy_directory_toolchains = False,  # this registration is handled elsewhere with bzlmod
-                register_copy_to_directory_toolchains = False,  # this registration is handled elsewhere with bzlmod
-                register_coreutils_toolchains = False,  # this registration is handled elsewhere with bzlmod
-                register_yq_toolchains = False,  # this registration is handled elsewhere with bzlmod
-                register_tar_toolchains = False,  # this registration is handled elsewhere with bzlmod
                 replace_packages = attr.replace_packages,
                 root_package = attr.root_package,
                 run_lifecycle_hooks = attr.run_lifecycle_hooks,
@@ -173,8 +168,6 @@
                     transitive_closure = i.transitive_closure,
                     url = i.url,
                     version = i.version,
-                    register_copy_directory_toolchains = False,  # this registration is handled elsewhere with bzlmod
-                    register_copy_to_directory_toolchains = False,  # this registration is handled elsewhere with bzlmod
                 )
 
         for i in mod.tags.npm_import:
@@ -206,8 +199,6 @@
                 transitive_closure = i.transitive_closure,
                 url = i.url,
                 version = i.version,
-                register_copy_directory_toolchains = False,  # this registration is handled elsewhere with bzlmod
-                register_copy_to_directory_toolchains = False,  # this registration is handled elsewhere with bzlmod
             )
 
     if bazel_features.external_deps.extension_metadata_has_reproducible:
diff --git a/npm/private/npm_import.bzl b/npm/private/npm_import.bzl
index fb71144..300e0b7 100644
--- a/npm/private/npm_import.bzl
+++ b/npm/private/npm_import.bzl
@@ -18,7 +18,6 @@
 """
 
 load("@aspect_bazel_lib//lib:repo_utils.bzl", "patch", "repo_utils")
-load("@aspect_bazel_lib//lib:repositories.bzl", _register_copy_directory_toolchains = "register_copy_directory_toolchains", _register_copy_to_directory_toolchains = "register_copy_to_directory_toolchains")
 load("@bazel_skylib//lib:dicts.bzl", "dicts")
 load("@bazel_skylib//lib:paths.bzl", "paths")
 load(
@@ -888,8 +887,6 @@
         npm_auth_password = "",
         bins = {},
         dev = False,
-        register_copy_directory_toolchains = True,
-        register_copy_to_directory_toolchains = True,
         **kwargs):
     """Import a single npm package into Bazel.
 
@@ -1134,19 +1131,9 @@
 
         dev: Whether this npm package is a dev dependency
 
-        register_copy_directory_toolchains: if True, `@aspect_bazel_lib//lib:repositories.bzl` `register_copy_directory_toolchains()` is called if the toolchain is not already registered
-
-        register_copy_to_directory_toolchains: if True, `@aspect_bazel_lib//lib:repositories.bzl` `register_copy_to_directory_toolchains()` is called if the toolchain is not already registered
-
         **kwargs: Internal use only
     """
 
-    # TODO(2.0): move this to a new required rules_js_repositories() WORKSPACE function
-    if register_copy_directory_toolchains and not native.existing_rule("copy_directory_toolchains"):
-        _register_copy_directory_toolchains()
-    if register_copy_to_directory_toolchains and not native.existing_rule("copy_to_directory_toolchains"):
-        _register_copy_to_directory_toolchains()
-
     generate_bzl_library_targets = kwargs.pop("generate_bzl_library_targets", None)
     extract_full_archive = kwargs.pop("extract_full_archive", None)
     if len(kwargs):
diff --git a/npm/private/npm_package.bzl b/npm/private/npm_package.bzl
index 0478be7..45847a7 100644
--- a/npm/private/npm_package.bzl
+++ b/npm/private/npm_package.bzl
@@ -506,14 +506,6 @@
 
     For more information on stamping, read https://docs.aspect.build/rules/aspect_bazel_lib/docs/stamping.
 
-    Using this rule requires that you register the jq toolchain in your WORKSPACE:
-
-    ```starlark
-    load("@aspect_bazel_lib//lib:repositories.bzl", "register_jq_toolchains")
-
-    register_jq_toolchains()
-    ```
-
     Args:
         name: name of the resulting `jq` target, must be "package"
         stamp_var: a key from the bazel-out/stable-status.txt or bazel-out/volatile-status.txt files
diff --git a/npm/private/npm_translate_lock.bzl b/npm/private/npm_translate_lock.bzl
index be112d9..c74bc77 100644
--- a/npm/private/npm_translate_lock.bzl
+++ b/npm/private/npm_translate_lock.bzl
@@ -26,14 +26,6 @@
 """
 
 load("@bazel_skylib//lib:paths.bzl", "paths")
-load(
-    "@aspect_bazel_lib//lib:repositories.bzl",
-    _register_copy_directory_toolchains = "register_copy_directory_toolchains",
-    _register_copy_to_directory_toolchains = "register_copy_to_directory_toolchains",
-    _register_coreutils_toolchains = "register_coreutils_toolchains",
-    _register_tar_toolchains = "register_tar_toolchains",
-    _register_yq_toolchains = "register_yq_toolchains",
-)
 load("@aspect_bazel_lib//lib:write_source_files.bzl", "write_source_file")
 load(":list_sources.bzl", "list_sources")
 load(":npm_translate_lock_generate.bzl", "generate_repository_files")
@@ -193,11 +185,6 @@
         link_workspace = None,
         pnpm_version = LATEST_PNPM_VERSION,
         use_pnpm = None,
-        register_copy_directory_toolchains = True,
-        register_copy_to_directory_toolchains = True,
-        register_coreutils_toolchains = True,
-        register_yq_toolchains = True,
-        register_tar_toolchains = True,
         npm_package_target_name = "{dirname}",
         use_starlark_yaml_parser = False,
         **kwargs):
@@ -518,16 +505,6 @@
 
             Use `pnpm_version` for non-bzlmod.
 
-        register_copy_directory_toolchains: if True, `@aspect_bazel_lib//lib:repositories.bzl` `register_copy_directory_toolchains()` is called if the toolchain is not already registered
-
-        register_copy_to_directory_toolchains: if True, `@aspect_bazel_lib//lib:repositories.bzl` `register_copy_to_directory_toolchains()` is called if the toolchain is not already registered
-
-        register_coreutils_toolchains: if True, `@aspect_bazel_lib//lib:repositories.bzl` `register_coreutils_toolchains()` is called if the toolchain is not already registered
-
-        register_yq_toolchains: if True, `@aspect_bazel_lib//lib:repositories.bzl` `register_yq_toolchains()` is called if the toolchain is not already registered
-
-        register_tar_toolchains: if True, `@aspect_bazel_lib//lib:repositories.bzl` `register_tar_toolchains()` is called if the toolchain is not already registered
-
         npm_package_target_name: The name of linked `npm_package` targets. When `npm_package` targets are linked as pnpm workspace
             packages, the name of the target must align with this value.
 
@@ -565,18 +542,6 @@
         **kwargs: Internal use only
     """
 
-    # TODO(2.0): move this to a new required rules_js_repositories() WORKSPACE function
-    if register_copy_directory_toolchains and not native.existing_rule("copy_directory_toolchains"):
-        _register_copy_directory_toolchains()
-    if register_copy_to_directory_toolchains and not native.existing_rule("copy_to_directory_toolchains"):
-        _register_copy_to_directory_toolchains()
-    if register_coreutils_toolchains and not native.existing_rule("register_coreutils_toolchains"):
-        _register_coreutils_toolchains()
-    if register_yq_toolchains and not native.existing_rule("yq_toolchains"):
-        _register_yq_toolchains()
-    if register_tar_toolchains and not native.existing_rule("tar_toolchains"):
-        _register_tar_toolchains()
-
     # Gather undocumented attributes
     root_package = kwargs.pop("root_package", None)
     additional_file_contents = kwargs.pop("additional_file_contents", {})
diff --git a/npm/private/pnpm_repository.bzl b/npm/private/pnpm_repository.bzl
index dbcec63..5e868ce 100644
--- a/npm/private/pnpm_repository.bzl
+++ b/npm/private/pnpm_repository.bzl
@@ -40,6 +40,4 @@
                 """js_binary(name = "pnpm", data = glob(["package/**"]), entry_point = "package/dist/pnpm.cjs", visibility = ["//visibility:public"])""",
             ]),
             extract_full_archive = True,
-            register_copy_directory_toolchains = False,  # this code path should work for both WORKSPACE and bzlmod
-            register_copy_to_directory_toolchains = False,  # this code path should work for both WORKSPACE and bzlmod
         )
diff --git a/npm/repositories.bzl b/npm/repositories.bzl
index c9ef299..96b76ab 100644
--- a/npm/repositories.bzl
+++ b/npm/repositories.bzl
@@ -1,16 +1,12 @@
 """Repository rules to fetch third-party npm packages"""
 
-load("@bazel_features//:deps.bzl", "bazel_features_deps")
 load("//npm/private:npm_import.bzl", _npm_import = "npm_import")
 load("//npm/private:npm_translate_lock.bzl", _list_patches = "list_patches", _npm_translate_lock = "npm_translate_lock")
 load("//npm/private:pnpm_repository.bzl", _LATEST_PNPM_VERSION = "LATEST_PNPM_VERSION", _pnpm_repository = "pnpm_repository")
 
-npm_import = _npm_import
-
-def npm_translate_lock(**kwargs):
-    bazel_features_deps()
-    _npm_translate_lock(**kwargs)
-
-pnpm_repository = _pnpm_repository
 LATEST_PNPM_VERSION = _LATEST_PNPM_VERSION
+
 list_patches = _list_patches
+npm_import = _npm_import
+npm_translate_lock = _npm_translate_lock
+pnpm_repository = _pnpm_repository