refactor: use new toolchain for nodejs_binary
diff --git a/WORKSPACE b/WORKSPACE
index ca8cee2..277372a 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -40,16 +40,6 @@
 )
 
 #
-# Setup node repositories
-#
-
-load("//:index.bzl", "BAZEL_VERSION", "SUPPORTED_BAZEL_VERSIONS", "node_repositories")
-
-node_repositories(
-    node_version = "16.5.0",
-)
-
-#
 # Install rules_nodejs dev dependencies
 #
 
@@ -75,6 +65,12 @@
     node_version = "15.14.0",
 )
 
+load("//:index.bzl", "BAZEL_VERSION", "SUPPORTED_BAZEL_VERSIONS", "node_repositories")
+
+node_repositories(
+    node_version = "16.5.0",
+)
+
 load("@build_bazel_rules_nodejs//:npm_deps.bzl", "npm_deps")
 
 npm_deps()
diff --git a/e2e/BUILD.bazel b/e2e/BUILD.bazel
index e842c04..cb34a9f 100644
--- a/e2e/BUILD.bazel
+++ b/e2e/BUILD.bazel
@@ -82,6 +82,12 @@
 
 e2e_integration_test(
     name = "e2e_nodejs_repository",
+    # Only run on buildkite linux as we hard-coded the platform in the test
+    tags = [
+        "no-bazelci-mac",
+        "no-bazelci-windows",
+        "no-circleci",
+    ],
 )
 
 e2e_integration_test(
diff --git a/e2e/nodejs_image/BUILD.bazel b/e2e/nodejs_image/BUILD.bazel
index 2ddc6e8..f15e5c4 100644
--- a/e2e/nodejs_image/BUILD.bazel
+++ b/e2e/nodejs_image/BUILD.bazel
@@ -17,6 +17,7 @@
     name = "nodejs_image",
     binary = ":main",
     include_node_repo_args = False,
+    node_repository_name = "nodejs_linux_amd64",
 )
 
 container_test(
diff --git a/e2e/nodejs_repository/BUILD.bazel b/e2e/nodejs_repository/BUILD.bazel
index cb42cd1..cc3a88e 100644
--- a/e2e/nodejs_repository/BUILD.bazel
+++ b/e2e/nodejs_repository/BUILD.bazel
@@ -7,18 +7,18 @@
     name = "test",
     data = [
         "index.spec.js",
-        "@nodejs//:node",
-        "@nodejs//:node_bin",
-        "@nodejs//:node_files",
-        "@nodejs//:npm",
-        "@nodejs//:npm_bin",
-        "@nodejs//:npm_files",
-        "@nodejs//:npm_node_repositories",
-        "@nodejs//:npx_bin",
-        "@nodejs//:yarn",
-        "@nodejs//:yarn_bin",
-        "@nodejs//:yarn_files",
-        "@nodejs//:yarn_node_repositories",
+        "@nodejs_linux_amd64//:node",
+        "@nodejs_linux_amd64//:node_bin",
+        "@nodejs_linux_amd64//:node_files",
+        "@nodejs_linux_amd64//:npm",
+        "@nodejs_linux_amd64//:npm_bin",
+        "@nodejs_linux_amd64//:npm_files",
+        "@nodejs_linux_amd64//:npm_node_repositories",
+        "@nodejs_linux_amd64//:npx_bin",
+        "@nodejs_linux_amd64//:yarn",
+        "@nodejs_linux_amd64//:yarn_bin",
+        "@nodejs_linux_amd64//:yarn_files",
+        "@nodejs_linux_amd64//:yarn_node_repositories",
     ],
     entry_point = ":index.spec.js",
 )
diff --git a/e2e/symlinked_node_modules_npm/WORKSPACE b/e2e/symlinked_node_modules_npm/WORKSPACE
index 0cbf420..eecafed 100644
--- a/e2e/symlinked_node_modules_npm/WORKSPACE
+++ b/e2e/symlinked_node_modules_npm/WORKSPACE
@@ -16,6 +16,10 @@
     path = "../..",
 )
 
+load("@rules_nodejs//nodejs:repositories.bzl", "nodejs_register_toolchains")
+
+nodejs_register_toolchains(name = "node")
+
 # rules_nodejs_dev_dependencies() required since we're using local_repository for
 # build_bazel_rules_nodejs above.
 load("@build_bazel_rules_nodejs//:package.bzl", "rules_nodejs_dev_dependencies")
diff --git a/e2e/symlinked_node_modules_yarn/WORKSPACE b/e2e/symlinked_node_modules_yarn/WORKSPACE
index 31a53a6..92947db 100644
--- a/e2e/symlinked_node_modules_yarn/WORKSPACE
+++ b/e2e/symlinked_node_modules_yarn/WORKSPACE
@@ -16,6 +16,10 @@
     path = "../..",
 )
 
+load("@rules_nodejs//nodejs:repositories.bzl", "nodejs_register_toolchains")
+
+nodejs_register_toolchains(name = "node")
+
 # rules_nodejs_dev_dependencies() required since we're using local_repository for
 # build_bazel_rules_nodejs above.
 load("@build_bazel_rules_nodejs//:package.bzl", "rules_nodejs_dev_dependencies")
diff --git a/examples/angular/WORKSPACE b/examples/angular/WORKSPACE
index 4492738..9d2270c 100644
--- a/examples/angular/WORKSPACE
+++ b/examples/angular/WORKSPACE
@@ -19,10 +19,15 @@
     urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/4.4.0/rules_nodejs-4.4.0.tar.gz"],
 )
 
-load("@build_bazel_rules_nodejs//nodejs:repositories.bzl", "rules_nodejs_dependencies")
+load("@build_bazel_rules_nodejs//nodejs:repositories.bzl", "nodejs_register_toolchains", "rules_nodejs_dependencies")
 
 rules_nodejs_dependencies()
 
+nodejs_register_toolchains(
+    name = "nodejs",
+    node_version = "12.14.1",
+)
+
 load("@bazel_skylib//:workspace.bzl", "bazel_skylib_workspace")
 
 bazel_skylib_workspace()
@@ -44,11 +49,7 @@
 )
 
 # Check the bazel version and download npm dependencies
-load("@build_bazel_rules_nodejs//:index.bzl", "node_repositories", "yarn_install")
-
-node_repositories(
-    node_version = "12.14.1",
-)
+load("@build_bazel_rules_nodejs//:index.bzl", "yarn_install")
 
 # Setup the Node.js toolchain & install our npm dependencies into @npm
 yarn_install(
diff --git a/examples/angular/src/BUILD.bazel b/examples/angular/src/BUILD.bazel
index e5f7945..b63af3f 100644
--- a/examples/angular/src/BUILD.bazel
+++ b/examples/angular/src/BUILD.bazel
@@ -224,6 +224,7 @@
     name = "nodejs_image",
     binary = ":prodserver",
     include_node_repo_args = False,
+    node_repository_name = "nodejs_linux_amd64",
     # Actions created by this rule are I/O-bound,
     # so there is no benefit to running them remotely
     tags = ["local"],
diff --git a/examples/nestjs/src/BUILD.bazel b/examples/nestjs/src/BUILD.bazel
index 2b4d32d..0081353 100644
--- a/examples/nestjs/src/BUILD.bazel
+++ b/examples/nestjs/src/BUILD.bazel
@@ -78,4 +78,5 @@
     name = "docker",
     binary = ":server",
     include_node_repo_args = False,
+    node_repository_name = "nodejs_linux_amd64",
 )
diff --git a/examples/parcel/BUILD.bazel b/examples/parcel/BUILD.bazel
index 04596b8..5a729bf 100644
--- a/examples/parcel/BUILD.bazel
+++ b/examples/parcel/BUILD.bazel
@@ -1,6 +1,13 @@
-load("@build_bazel_rules_nodejs//:index.bzl", "generated_file_test")
+load("@build_bazel_rules_nodejs//:index.bzl", "generated_file_test", "nodejs_test")
 load(":parcel.bzl", "parcel")
 
+# Double-check that we're on the right nodejs version
+# since CircleCI fails with a python error if we are too new
+nodejs_test(
+    name = "test_version",
+    entry_point = "node_version.js",
+)
+
 parcel(
     name = "bundle",
     srcs = [
diff --git a/examples/parcel/WORKSPACE b/examples/parcel/WORKSPACE
index 105875b..2943e26 100644
--- a/examples/parcel/WORKSPACE
+++ b/examples/parcel/WORKSPACE
@@ -25,13 +25,12 @@
     urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/4.4.0/rules_nodejs-4.4.0.tar.gz"],
 )
 
-load("@build_bazel_rules_nodejs//nodejs:repositories.bzl", "rules_nodejs_dependencies")
+load("@build_bazel_rules_nodejs//nodejs:repositories.bzl", "nodejs_register_toolchains", "rules_nodejs_dependencies")
 
 rules_nodejs_dependencies()
 
-load("@build_bazel_rules_nodejs//:index.bzl", "node_repositories", "npm_install")
-
-node_repositories(
+nodejs_register_toolchains(
+    name = "nodejs",
     # with node 16, this example fails on circleCI, because
     # parcel has a gyp build on install that fails due to wrong
     # version of the python interpreter:
@@ -53,6 +52,8 @@
     node_version = "14.17.5",
 )
 
+load("@build_bazel_rules_nodejs//:index.bzl", "npm_install")
+
 npm_install(
     name = "npm",
     exports_directories_only = True,
diff --git a/examples/parcel/node_version.js b/examples/parcel/node_version.js
new file mode 100644
index 0000000..92c50d5
--- /dev/null
+++ b/examples/parcel/node_version.js
@@ -0,0 +1 @@
+require('assert').equal(process.version, 'v14.17.5')
diff --git a/examples/vendored_node/BUILD.bazel b/examples/vendored_node/BUILD.bazel
index d1cca41..4c5e79b 100644
--- a/examples/vendored_node/BUILD.bazel
+++ b/examples/vendored_node/BUILD.bazel
@@ -1,4 +1,20 @@
 load("@npm//@bazel/jasmine:index.bzl", "jasmine_node_test")
+load("@rules_nodejs//nodejs:toolchain.bzl", "node_toolchain")
+
+node_toolchain(
+    name = "node_toolchain",
+    target_tool = "@vendored_node_15_0_1//:node-v15.0.1-linux-x64/bin/node",
+)
+
+toolchain(
+    name = "node15_toolchain",
+    exec_compatible_with = [
+        "@platforms//os:linux",
+        "@platforms//cpu:x86_64",
+    ],
+    toolchain = ":node_toolchain",
+    toolchain_type = "@rules_nodejs//nodejs:toolchain_type",
+)
 
 jasmine_node_test(
     name = "test",
diff --git a/examples/vendored_node/WORKSPACE b/examples/vendored_node/WORKSPACE
index 075a9c5..18375dc 100644
--- a/examples/vendored_node/WORKSPACE
+++ b/examples/vendored_node/WORKSPACE
@@ -36,14 +36,11 @@
     urls = ["https://nodejs.org/dist/v15.0.1/node-v15.0.1-linux-x64.tar.xz"],
 )
 
-load("@build_bazel_rules_nodejs//:index.bzl", "node_repositories", "npm_install")
+load("@build_bazel_rules_nodejs//:index.bzl", "npm_install")
 
 # This example only works on linux as it downloads the linux node distribution
 # TODO(gregmagolan): make node_repositories acccept different archives for different platforms
-node_repositories(
-    node_version = "15.0.1",
-    vendored_node = "@vendored_node_15_0_1//:node-v15.0.1-linux-x64",
-)
+register_toolchains("//:node15_toolchain")
 
 npm_install(
     name = "npm",
diff --git a/examples/vendored_node_and_yarn/BUILD.bazel b/examples/vendored_node_and_yarn/BUILD.bazel
index d1cca41..f29ef40 100644
--- a/examples/vendored_node_and_yarn/BUILD.bazel
+++ b/examples/vendored_node_and_yarn/BUILD.bazel
@@ -1,4 +1,20 @@
 load("@npm//@bazel/jasmine:index.bzl", "jasmine_node_test")
+load("@rules_nodejs//nodejs:toolchain.bzl", "node_toolchain")
+
+node_toolchain(
+    name = "node_toolchain",
+    target_tool = "@vendored_node_10_12_0//:node-v10.12.0-linux-x64/bin/node",
+)
+
+toolchain(
+    name = "node10_toolchain",
+    exec_compatible_with = [
+        "@platforms//os:linux",
+        "@platforms//cpu:x86_64",
+    ],
+    toolchain = ":node_toolchain",
+    toolchain_type = "@rules_nodejs//nodejs:toolchain_type",
+)
 
 jasmine_node_test(
     name = "test",
diff --git a/examples/vendored_node_and_yarn/WORKSPACE b/examples/vendored_node_and_yarn/WORKSPACE
index 31b3d5c..1c6b739 100644
--- a/examples/vendored_node_and_yarn/WORKSPACE
+++ b/examples/vendored_node_and_yarn/WORKSPACE
@@ -42,6 +42,8 @@
     urls = ["https://github.com/yarnpkg/yarn/releases/download/v1.10.0/yarn-v1.10.0.tar.gz"],
 )
 
+register_toolchains("//:node10_toolchain")
+
 load("@build_bazel_rules_nodejs//:index.bzl", "node_repositories", "yarn_install")
 
 # This example only works on linux as it downloads the linux node distribution
diff --git a/internal/node/BUILD.bazel b/internal/node/BUILD.bazel
index 684a60d..30d499e 100644
--- a/internal/node/BUILD.bazel
+++ b/internal/node/BUILD.bazel
@@ -32,6 +32,7 @@
         "//nodejs:bzl",
         "//third_party/github.com/bazelbuild/bazel-skylib:bzl",
         "//toolchains/node:bzl",
+        "@rules_nodejs//nodejs:bzl",
     ],
 )
 
diff --git a/internal/node/node.bzl b/internal/node/node.bzl
index a42dcfb..ec70f02 100644
--- a/internal/node/node.bzl
+++ b/internal/node/node.bzl
@@ -241,18 +241,18 @@
 
     # Add both the node executable for the user's local machine which is in ctx.files._node and comes
     # from @nodejs//:node_bin and the node executable from the selected node --platform which comes from
-    # ctx.toolchains["@build_bazel_rules_nodejs//toolchains/node:toolchain_type"].nodeinfo.
+    # ctx.toolchains["@rules_nodejs//nodejs:toolchain_type"].nodeinfo.
     # In most cases these are the same files but for RBE and when explitely setting --platform for cross-compilation
     # any given nodejs_binary should be able to run on both the user's local machine and on the RBE or selected
     # platform.
     #
-    # Rules such as nodejs_image should use only ctx.toolchains["@build_bazel_rules_nodejs//toolchains/node:toolchain_type"].nodeinfo
+    # Rules such as nodejs_image should use only ctx.toolchains["@rules_nodejs//nodejs:toolchain_type"].nodeinfo
     # when building the image as that will reflect the selected --platform.
 
     if ctx.attr.toolchain:
         node_toolchain = ctx.attr.toolchain[platform_common.ToolchainInfo]
     else:
-        node_toolchain = ctx.toolchains["@build_bazel_rules_nodejs//toolchains/node:toolchain_type"]
+        node_toolchain = ctx.toolchains["@rules_nodejs//nodejs:toolchain_type"]
 
     node_tool_files = []
     node_tool_files.extend(node_toolchain.nodeinfo.tool_files)
@@ -636,7 +636,7 @@
     "implementation": _nodejs_binary_impl,
     "outputs": _NODEJS_EXECUTABLE_OUTPUTS,
     "toolchains": [
-        "@build_bazel_rules_nodejs//toolchains/node:toolchain_type",
+        "@rules_nodejs//nodejs:toolchain_type",
         "@bazel_tools//tools/sh:toolchain_type",
     ],
 }
diff --git a/internal/node/node_repositories.bzl b/internal/node/node_repositories.bzl
index b20bb73..0a6c72e 100644
--- a/internal/node/node_repositories.bzl
+++ b/internal/node/node_repositories.bzl
@@ -20,10 +20,10 @@
 
 load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")
 load("//internal/common:check_bazel_version.bzl", "check_bazel_version")
-load("//nodejs/private:nodejs_repo_host_os_alias.bzl", "nodejs_repo_host_os_alias")
 load("//nodejs/private:os_name.bzl", "OS_ARCH_NAMES", "node_exists_for_os", "os_name")
 load("//nodejs:repositories.bzl", "DEFAULT_NODE_VERSION", node_repositories_rule = "node_repositories")
 load("//toolchains/node:node_toolchain_configure.bzl", "node_toolchain_configure")
+load("@rules_nodejs//nodejs:repositories.bzl", "nodejs_register_toolchains")
 
 def node_repositories(**kwargs):
     """
@@ -64,10 +64,5 @@
             target_tool = target_tool,
         )
 
-    # This "nodejs" repo is just for convenience so one does not have to target @nodejs_<os_name>//...
-    # All it does is create aliases to the @nodejs_<host_os>_<host_arch> repository
-    maybe(
-        nodejs_repo_host_os_alias,
-        name = "nodejs",
-        node_version = node_version,
-    )
+    # Install new toolchain under "nodejs" repository name prefix
+    nodejs_register_toolchains(name = "nodejs")
diff --git a/packages/concatjs/BUILD.bazel b/packages/concatjs/BUILD.bazel
index b53290c..e00704c 100644
--- a/packages/concatjs/BUILD.bazel
+++ b/packages/concatjs/BUILD.bazel
@@ -47,11 +47,7 @@
 bzl_library(
     name = "bzl",
     testonly = True,
-    srcs = glob(["*.bzl"]) + [
-        # Work-around since we don't have and don't wnat a bzl_library in the generated
-        # @nodejs//:BUILD.bazel file
-        "@nodejs//:index.bzl",
-    ],
+    srcs = glob(["*.bzl"]),
     deps = [
         "//packages/concatjs/devserver:bzl",
         "//packages/concatjs/internal:bzl",
diff --git a/packages/typescript/BUILD.bazel b/packages/typescript/BUILD.bazel
index b944950..e441ce1 100644
--- a/packages/typescript/BUILD.bazel
+++ b/packages/typescript/BUILD.bazel
@@ -23,11 +23,7 @@
 
 bzl_library(
     name = "bzl",
-    srcs = glob(["*.bzl"]) + [
-        # Work-around since we don't have and don't want a bzl_library in the generated
-        # @nodejs//:BUILD.bazel file
-        "@nodejs//:index.bzl",
-    ],
+    srcs = glob(["*.bzl"]),
     deps = [
         "//packages/typescript/internal:bzl",
         "@build_bazel_rules_nodejs//:bzl",