fix(jasmine): can not reference runner when exports_directories_only=True
diff --git a/docs/Jasmine.md b/docs/Jasmine.md
index 84f84e0..f47fd68 100755
--- a/docs/Jasmine.md
+++ b/docs/Jasmine.md
@@ -99,13 +99,13 @@
 
 A label providing the `@bazel/jasmine` npm dependency.
 
-Defaults to `"@npm//@bazel/jasmine"`
+Defaults to `None`
 
 <h4 id="jasmine_node_test-jasmine_entry_point">jasmine_entry_point</h4>
 
 A label providing the `@bazel/jasmine` entry point.
 
-Defaults to `Label("@npm//@bazel/jasmine:jasmine_runner.js")`
+Defaults to `None`
 
 <h4 id="jasmine_node_test-kwargs">kwargs</h4>
 
diff --git a/examples/nestjs/WORKSPACE b/examples/nestjs/WORKSPACE
index a38a103..a9cf6ac 100644
--- a/examples/nestjs/WORKSPACE
+++ b/examples/nestjs/WORKSPACE
@@ -30,7 +30,7 @@
 
 yarn_install(
     name = "npm",
-    exports_directories_only = False,
+    exports_directories_only = True,
     package_json = "//:package.json",
     yarn_lock = "//:yarn.lock",
 )
diff --git a/internal/npm_install/generate_build_file.ts b/internal/npm_install/generate_build_file.ts
index 5aeaf15..fa2448d 100644
--- a/internal/npm_install/generate_build_file.ts
+++ b/internal/npm_install/generate_build_file.ts
@@ -386,7 +386,8 @@
   // If there's an index.bzl in the package then copy all the package's files
   // other than the BUILD file which we'll write below.
   // (maybe we shouldn't copy .js though, since it belongs under node_modules?)
-  if (pkg._files.includes('index.bzl')) {
+  const hasIndexBzl = pkg._files.includes('index.bzl')
+  if (hasIndexBzl) {
     await pkg._files.filter(f => f !== 'BUILD' && f !== 'BUILD.bazel').reduce(async (prev, file) => {
       if (/^node_modules[/\\]/.test(file)) {
         // don't copy over nested node_modules
@@ -406,16 +407,19 @@
       await mkdirp(path.dirname(destFile));
       await fs.copyFile(src, destFile);
     }, Promise.resolve());
-  } else {
+  } 
+
+
     const indexFile = printIndexBzl(pkg);
+    const indexFileName = hasIndexBzl ? 'private.bzl' : 'index.bzl'
     if (indexFile.length) {
-      await writeFile(path.posix.join(pkg._dir, 'index.bzl'), indexFile);
+      await writeFile(path.posix.join(pkg._dir, indexFileName), indexFile);
       buildFile += `
 # For integration testing
-exports_files(["index.bzl"])
+exports_files(["${indexFileName}"])
 `;
     }
-  }
+  
 
   if (!symlinkBuildFile) {
     await writeFile(
diff --git a/internal/npm_install/index.js b/internal/npm_install/index.js
index 8f2fddd..5dca4cd 100644
--- a/internal/npm_install/index.js
+++ b/internal/npm_install/index.js
@@ -249,7 +249,8 @@
             await writeFile(path.posix.join(pkg._dir, 'bin', 'BUILD.bazel'), generateBuildFileHeader(visibility) + binBuildFile);
         }
     }
-    if (pkg._files.includes('index.bzl')) {
+    const hasIndexBzl = pkg._files.includes('index.bzl');
+    if (hasIndexBzl) {
         await pkg._files.filter(f => f !== 'BUILD' && f !== 'BUILD.bazel').reduce(async (prev, file) => {
             if (/^node_modules[/\\]/.test(file)) {
                 return;
@@ -266,15 +267,14 @@
             await fs_1.promises.copyFile(src, destFile);
         }, Promise.resolve());
     }
-    else {
-        const indexFile = printIndexBzl(pkg);
-        if (indexFile.length) {
-            await writeFile(path.posix.join(pkg._dir, 'index.bzl'), indexFile);
-            buildFile += `
+    const indexFile = printIndexBzl(pkg);
+    const indexFileName = hasIndexBzl ? 'private.bzl' : 'index.bzl';
+    if (indexFile.length) {
+        await writeFile(path.posix.join(pkg._dir, indexFileName), indexFile);
+        buildFile += `
 # For integration testing
-exports_files(["index.bzl"])
+exports_files(["${indexFileName}"])
 `;
-        }
     }
     if (!symlinkBuildFile) {
         await writeFile(path.posix.join(pkg._dir, buildFilePath), generateBuildFileHeader(visibility) + buildFile);
diff --git a/packages/jasmine/BUILD.bazel b/packages/jasmine/BUILD.bazel
index 83d71c1..2b09373 100644
--- a/packages/jasmine/BUILD.bazel
+++ b/packages/jasmine/BUILD.bazel
@@ -39,7 +39,10 @@
     out = "README.md",
     input = "index.bzl",
     tags = ["fix-windows"],
-    deps = [":bzl"],
+    deps = [
+        ":bzl",
+        "//packages/jasmine/private:bzl",
+    ],
 )
 
 nodejs_test(
@@ -81,7 +84,7 @@
     ],
     build_file_content = "",
     substitutions = {
-        "//packages/jasmine:jasmine_runner.js": "//:node_modules/@bazel/jasmine/jasmine_runner.js",
+        "//packages/jasmine/private:jasmine_runner_test.bzl": "//@bazel/jasmine:private.bzl",
     },
     deps = [
         ":README.md",
diff --git a/packages/jasmine/jasmine_node_test.bzl b/packages/jasmine/jasmine_node_test.bzl
index 1a117ab..1a5d7d0 100644
--- a/packages/jasmine/jasmine_node_test.bzl
+++ b/packages/jasmine/jasmine_node_test.bzl
@@ -19,6 +19,7 @@
 """
 
 load("@rules_nodejs//nodejs:providers.bzl", "JSModuleInfo")
+load("//packages/jasmine/private:jasmine_runner_test.bzl", "jasmine_runner_test")
 load("@build_bazel_rules_nodejs//internal/node:node.bzl", nodejs_test = "nodejs_test_macro")
 
 def _js_sources_impl(ctx):
@@ -66,10 +67,9 @@
         tags = [],
         config_file = None,
         use_direct_specs = None,
-        # Replaced by pkg_npm with jasmine = "//@bazel/jasmine",
-        jasmine = "//packages/jasmine",
-        # Replaced by pkg_npm with jasmine_entry_point = "//:node_modules/@bazel/jasmine/jasmine_runner.js",
-        jasmine_entry_point = Label("//packages/jasmine:jasmine_runner.js"),
+        # Kept for backward compatibility
+        jasmine = None,
+        jasmine_entry_point = None,
         **kwargs):
     """Runs tests in NodeJS using the Jasmine test runner.
 
@@ -117,7 +117,10 @@
         use_direct_specs = use_direct_specs,
     )
 
-    all_data = data + srcs + deps + [Label(jasmine)]
+    all_data = data + srcs + deps
+
+    if jasmine != None:
+        all_data.append(jasmine)
 
     # BEGIN-INTERNAL
     # Only used when running tests in the rules_nodejs repo.
@@ -142,13 +145,20 @@
         pkg = Label("%s//%s:__pkg__" % (native.repository_name(), native.package_name()))
         all_data.append(pkg.relative(config_file))
 
-    nodejs_test(
+    kwargs = dict(
         name = name,
         data = all_data,
-        entry_point = jasmine_entry_point,
         templated_args = templated_args,
         testonly = 1,
         expected_exit_code = expected_exit_code,
         tags = tags,
         **kwargs
     )
+
+    if jasmine_entry_point:
+        nodejs_test(
+            entry_point = jasmine_entry_point,
+            **kwargs
+        )
+    else:
+        jasmine_runner_test(**kwargs)
diff --git a/packages/jasmine/package.json b/packages/jasmine/package.json
index 923a568..5a51b18 100644
--- a/packages/jasmine/package.json
+++ b/packages/jasmine/package.json
@@ -15,6 +15,9 @@
         "jasmine",
         "bazel"
     ],
+    "bin": {
+        "jasmine_runner": "jasmine_runner.js"
+    },
     "main": "index.js",
     "dependencies": {
         "jasmine-reporters": "~2.5.0",
diff --git a/packages/jasmine/private/BUILD.bazel b/packages/jasmine/private/BUILD.bazel
new file mode 100644
index 0000000..d3f93df
--- /dev/null
+++ b/packages/jasmine/private/BUILD.bazel
@@ -0,0 +1,10 @@
+load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
+
+bzl_library(
+    name = "bzl",
+    srcs = glob(["*.bzl"]),
+    visibility = ["//packages/jasmine:__pkg__"],
+    deps = [
+        "@build_bazel_rules_nodejs//internal/node:bzl",
+    ],
+)
diff --git a/packages/jasmine/private/jasmine_runner_test.bzl b/packages/jasmine/private/jasmine_runner_test.bzl
new file mode 100644
index 0000000..22ff288
--- /dev/null
+++ b/packages/jasmine/private/jasmine_runner_test.bzl
@@ -0,0 +1,13 @@
+"""
+This file mimics what we would get when we install a npm package with bin entries. Only used when jasmine_node_test is used directly
+from rnj sources and should not be published.
+"""
+
+load("@build_bazel_rules_nodejs//internal/node:node.bzl", nodejs_test = "nodejs_test_macro")
+
+def jasmine_runner_test(**kwargs):
+    nodejs_test(
+        entry_point = "//packages/jasmine:jasmine_runner.js",
+        data = ["//packages/jasmine"] + kwargs.pop("data", []),
+        **kwargs
+    )