blob: 2cbec77c541b982c3900c3dc7c8ec37a7e974bd8 [file] [view]
# User managed dependencies
This example shows how to write a simple Node.js program using nodejs rules from source and user managed npm dependencies.
## npm dependencies
In this example, we do the opposite of the `e2e/bazel_managed_deps`. Instead, the dependencies
are managed explicitly by the user. While we typically prefer to have Bazel manage dependencies, this
option could be useful if you vendor the depnedencies into your repository, or use a custom package
manager that's not integrated with Bazel.
`index.js` is the trivial program. You can run it like:
```sh
$ bazel run :example 1
Running program
increment 1 is 2
```
`index.spec.js` is a test. Run it with:
```sh
$ bazel test :test
//:test PASSED in 0.2s
Executed 1 out of 1 test: 1 test passes.
```
## WORKSPACE dependencies from source
When using user managed npm dependencies it is not possible to use the npm to install
Bazel rules from npm packages such as `@bazel/jasmine` or `@bazel/typescript`. Instead, these
dependencies are specified in your WORKSPACE file from source. For example to use the jasmine
rules:
```
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
name = "npm_bazel_jasmine",
urls = ["https://github.com/bazelbuild/rules_nodejs/archive/0.35.0.tar.gz"],
strip_prefix = "rules_nodejs-0.35.0/packages/jasmine/src",
sha256 = "48be6c21d4ee7bf2a6c3dd35ac54f8ff430944b65ab7a43a9cd742f23c9a7279",
)
```
In most cases you will also need the `build_bazel_rules_nodejs` dev dependencies installed
to use the rules from source.
```
load("@build_bazel_rules_nodejs//:package.bzl", "rules_nodejs_dev_dependencies")
rules_nodejs_dev_dependencies()
```