From 44aa27d33c3071b9d27f5041972844efa85eb816 Mon Sep 17 00:00:00 2001
From: Alex Eagle USAGE Runs npm install during workspace setup.npm_install
-npm_install(name, args, data, environment, included_files, manual_build_file_contents, package_json,
- package_lock_json, quiet, repo_mapping, strict_visibility, symlink_node_modules, timeout)
+npm_install(name, args, data, environment, included_files, manual_build_file_contents, npm_command,
+ package_json, package_lock_json, quiet, repo_mapping, strict_visibility,
+ symlink_node_modules, timeout)
npm_install
set to another value in the environment attribute). Scripts may use to this to
check if yarn is being run by the npm_install
repository rule.
LOCAL MODULES WITH THE NEED TO BE USED BOTH INSIDE AND OUTSIDE BAZEL
+ +When using a monorepo it’s common to have modules that we want to use locally and
+publish to an external package repository. This can be achieved using a js_library
rule
+with a package_name
attribute defined inside the local package BUILD
file. However,
+if the project relies on the local package dependency with file:
, this could introduce a
+race condition with the npm_install
rule.
In order to overcome it, a link will be created to the package BUILD
file from the
+npm external Bazel repository, which require us to complete a last step which is writing
+the expected targets on that same BUILD
file to be later used by the npm_install
+rule, which are: <package_name__files>
, <package_name__nested_node_modules>
,
+<package_name__contents>
, <package_name__typings>
and the last
+one just <package_name>
.
If you doubt what those targets should look like, check the
+generated BUILD
file for a given node module.
ATTRIBUTES
Defaults to ""
(String): The npm command to run, to install dependencies.
+ + See npm docs <https://docs.npmjs.com/cli/v6/commands>
+
+ In particular, for "ci" it says:
+ > If dependencies in the package lock do not match those in package.json, npm ci will exit with an error, instead of updating the package lock.
+
Defaults to "ci"
(Label, mandatory)
@@ -1250,9 +1281,9 @@USAGE
-yarn_install(name, args, data, environment, included_files, manual_build_file_contents, - package_json, quiet, repo_mapping, strict_visibility, symlink_node_modules, timeout, - use_global_yarn_cache, yarn_lock) +yarn_install(name, args, data, environment, frozen_lockfile, included_files, + manual_build_file_contents, package_json, quiet, repo_mapping, strict_visibility, + symlink_node_modules, timeout, use_global_yarn_cache, yarn_lock)
Runs yarn install during workspace setup.
@@ -1261,6 +1292,24 @@yarn_install
repository rule.
+LOCAL MODULES WITH THE NEED TO BE USED BOTH INSIDE AND OUTSIDE BAZEL
+ +When using a monorepo it’s common to have modules that we want to use locally and
+publish to an external package repository. This can be achieved using a js_library
rule
+with a package_name
attribute defined inside the local package BUILD
file. However,
+if the project relies on the local package dependency with link:
, this could introduce a
+race condition with the yarn_install
rule.
In order to overcome it, a link will be created to the package BUILD
file from the
+npm external Bazel repository, which require us to complete a last step which is writing
+the expected targets on that same BUILD
file to be later used by the yarn_install
+rule, which are: <package_name__files>
, <package_name__nested_node_modules>
,
+<package_name__contents>
, <package_name__typings>
and the last
+one just <package_name>
.
If you doubt what those targets should look like, check the
+generated BUILD
file for a given node module.
ATTRIBUTES
Defaults to {}
(Boolean): Use the --frozen-lockfile
flag for yarn.
Don’t generate a yarn.lock
lockfile and fail if an update is needed.
This flag enables an exact install of the version that is specified in the yarn.lock
+file. This helps to have reproducible builds across builds.
To update a dependency or install a new one run the yarn install
command with the
+vendored yarn binary. bazel run @nodejs//:yarn install
. You can pass the options like
+bazel run @nodejs//:yarn install -- -D <dep-name>
.
Defaults to True
(List of strings): List of file extensions to be included in the npm package targets.
diff --git a/docs/Built-ins.md b/docs/Built-ins.md index bd7ec7d1af..d2e78262c4 100755 --- a/docs/Built-ins.md +++ b/docs/Built-ins.md @@ -823,8 +823,9 @@ Defaults to `[]` **USAGE**-npm_install(name, args, data, environment, included_files, manual_build_file_contents, package_json, - package_lock_json, quiet, repo_mapping, strict_visibility, symlink_node_modules, timeout) +npm_install(name, args, data, environment, included_files, manual_build_file_contents, npm_command, + package_json, package_lock_json, quiet, repo_mapping, strict_visibility, + symlink_node_modules, timeout)Runs npm install during workspace setup. @@ -833,6 +834,25 @@ This rule will set the environment variable `BAZEL_NPM_INSTALL` to '1' (unless i set to another value in the environment attribute). Scripts may use to this to check if yarn is being run by the `npm_install` repository rule. + +**LOCAL MODULES WITH THE NEED TO BE USED BOTH INSIDE AND OUTSIDE BAZEL** + +When using a monorepo it's common to have modules that we want to use locally and +publish to an external package repository. This can be achieved using a `js_library` rule +with a `package_name` attribute defined inside the local package `BUILD` file. However, +if the project relies on the local package dependency with `file:`, this could introduce a +race condition with the `npm_install` rule. + +In order to overcome it, a link will be created to the package `BUILD` file from the +npm external Bazel repository, which require us to complete a last step which is writing +the expected targets on that same `BUILD` file to be later used by the `npm_install` +rule, which are: `
-yarn_install(name, args, data, environment, included_files, manual_build_file_contents, - package_json, quiet, repo_mapping, strict_visibility, symlink_node_modules, timeout, - use_global_yarn_cache, yarn_lock) +yarn_install(name, args, data, environment, frozen_lockfile, included_files, + manual_build_file_contents, package_json, quiet, repo_mapping, strict_visibility, + symlink_node_modules, timeout, use_global_yarn_cache, yarn_lock)Runs yarn install during workspace setup. @@ -1168,6 +1199,25 @@ This rule will set the environment variable `BAZEL_YARN_INSTALL` to '1' (unless set to another value in the environment attribute). Scripts may use to this to check if yarn is being run by the `yarn_install` repository rule. + +**LOCAL MODULES WITH THE NEED TO BE USED BOTH INSIDE AND OUTSIDE BAZEL** + +When using a monorepo it's common to have modules that we want to use locally and +publish to an external package repository. This can be achieved using a `js_library` rule +with a `package_name` attribute defined inside the local package `BUILD` file. However, +if the project relies on the local package dependency with `link:`, this could introduce a +race condition with the `yarn_install` rule. + +In order to overcome it, a link will be created to the package `BUILD` file from the +npm external Bazel repository, which require us to complete a last step which is writing +the expected targets on that same `BUILD` file to be later used by the `yarn_install` +rule, which are: `
+karma_web_test(srcs, deps, data, configuration_env_vars, bootstrap, runtime_deps, static_files, + config_file, tags, peer_deps, kwargs) ++ +Runs unit tests in a browser with Karma. + +When executed under `bazel test`, this uses a headless browser for speed. +This is also because `bazel test` allows multiple targets to be tested together, +and we don't want to open a Chrome window on your machine for each one. Also, +under `bazel test` the test will execute and immediately terminate. + +Running under `ibazel test` gives you a "watch mode" for your tests. The rule is +optimized for this case - the test runner server will stay running and just +re-serve the up-to-date JavaScript source bundle. + +To debug a single test target, run it with `bazel run` instead. This will open a +browser window on your computer. Also you can use any other browser by opening +the URL printed when the test starts up. The test will remain running until you +cancel the `bazel run` command. + +This rule will use your system Chrome by default. In the default case, your +environment must specify CHROME_BIN so that the rule will know which Chrome binary to run. +Other `browsers` and `customLaunchers` may be set using the a base Karma configuration +specified in the `config_file` attribute. + +By default we open a headless Chrome. To use a real Chrome browser window, you can pass +`--define DISPLAY=true` to Bazel, along with `configuration_env_vars = ["DISPLAY"]` on +`karma_web_test`. + + +**PARAMETERS** + + +
+karma_web_test_suite(name, browsers, web_test_data, wrapped_test_tags, kwargs) ++ +Defines a test_suite of web_test targets that wrap a karma_web_test target. + +This macro accepts all parameters in karma_web_test and adds additional parameters +for the suite. See karma_web_test docs for all karma_web_test. + +The wrapping macro is `web_test_suite` which comes from rules_websting: +https://github.com/bazelbuild/rules_webtesting/blob/master/web/web.bzl. + + +**PARAMETERS** + + +
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
name = "build_bazel_rules_nodejs",
- sha256 = "f2194102720e662dbf193546585d705e645314319554c6ce7e47d8b59f459e9c",
- urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/2.2.2/rules_nodejs-2.2.2.tar.gz"],
+ sha256 = "290b659e7a6323e442db922175a4838e4ac622509f9e9fa0dd16b7ca30377d68",
+ urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/3.0.0-rc.0/rules_nodejs-3.0.0-rc.0.tar.gz"],
)
load("@build_bazel_rules_nodejs//:index.bzl", "node_repositories")