Skip to content

Commit c2927af

Browse files
gregmagolanalexeagle
authored andcommitted
refactor(builtin): remove node_modules attribute from nodejs_binary, nodejs_test & ts_library
BREAKING CHANGE: We removed the node_modules attribute from `nodejs_binary`, `nodejs_test`, `jasmine_node_test` & `ts_library`. If you are using the `node_modules` attribute, you can simply add the target specified there to the `data` or `deps` attribute of the rule instead. For example, ``` nodejs_test( name = "test", data = [ "test.js", "@npm//:node_modules", ], entry_point = "test.js", ) ``` or ``` ts_library( name = "lib", srcs = glob(["*.ts"]), tsconfig = ":tsconfig.json", deps = ["@npm//:node_modules"], ) ``` We also dropped support for filegroup based node_modules target and removed `node_modules_filegroup` from `index.bzl`. If you are using this feature for user-managed deps, you must now a `js_library` target with `external_npm_package` set to `True` instead. For example, ``` js_library( name = "node_modules", srcs = glob( include = [ "node_modules/**/*.js", "node_modules/**/*.d.ts", "node_modules/**/*.json", "node_modules/.bin/*", ], exclude = [ # Files under test & docs may contain file names that # are not legal Bazel labels (e.g., # node_modules/ecstatic/test/public/中文/檔案.html) "node_modules/**/test/**", "node_modules/**/docs/**", # Files with spaces in the name are not legal Bazel labels "node_modules/**/* */**", "node_modules/**/* *", ], ), # Provide ExternalNpmPackageInfo which is used by downstream rules # that use these npm dependencies external_npm_package = True, ) nodejs_test( name = "test", data = [ "test.js", ":node_modules", ], entry_point = "test.js", ) ``` See `examples/user_managed_deps` for a working example of user-managed npm dependencies.
1 parent afa095b commit c2927af

File tree

56 files changed

+333
-1164
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+333
-1164
lines changed

.bazelignore

+12-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,16 @@
1-
node_modules
2-
dist
1+
# NB: sematics here are not the same as .gitignore
2+
# see https://github.com/bazelbuild/bazel/issues/8106
3+
.git
34
bazel-out
5+
6+
# **/symlinked_node_modules_yarn
7+
node_modules
48
e2e/symlinked_node_modules_yarn/node_modules
5-
e2e/symlinked_node_modules_npm/node_modules/
9+
e2e/symlinked_node_modules_npm/node_modules
610
packages/angular/node_modules
711
examples/angular/node_modules
12+
examples/user_managed_deps/node_modules
13+
14+
# **/dist
15+
dist
16+
examples/user_managed_deps/dist

BUILD.bazel

-7
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,6 @@ bzl_library(
5757
],
5858
)
5959

60-
# Empty node_modules filegroup used for the default
61-
# value of the node_modules attribute in nodejs_binary
62-
filegroup(
63-
name = "node_modules_none",
64-
srcs = [],
65-
)
66-
6760
# BEGIN-INTERNAL
6861
codeowners(
6962
pattern = "*",

WORKSPACE

-16
Original file line numberDiff line numberDiff line change
@@ -53,22 +53,6 @@ yarn_install(
5353
environment = {
5454
"SOME_USER_ENV": "yarn is great!",
5555
},
56-
# The @npm//:node_modules_filegroup generated by manual_build_file_contents
57-
# is used in the //packages/typescript/test/reference_types_directive:tsconfig_types
58-
# test. For now we're still supporting node_modules as a filegroup tho this may
59-
# change in the future. The default generated //:node_modules target is a js_library
60-
# rule which provides NpmPackageInfo but we have not yet dropped support for
61-
# filegroup based node_modules target.
62-
manual_build_file_contents = """
63-
filegroup(
64-
name = "node_modules_filegroup",
65-
srcs = [
66-
"//@types/hammerjs:hammerjs__files",
67-
"//@types/jasmine:jasmine__files",
68-
"//typescript:typescript__files",
69-
],
70-
)
71-
""",
7256
package_json = "//:package.json",
7357
yarn_lock = "//:yarn.lock",
7458
)

e2e/bazel_managed_deps/BUILD.bazel

-10
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,5 @@
11
load("@npm//@bazel/jasmine:index.bzl", "jasmine_node_test")
22

3-
# Test what happens when we depend on the catch-all "node_modules" rule rather
4-
# than declare our dependencies on individual npm packages.
5-
# This is the legacy behavior prior to 0.13, so it also proves backwards-compatibility.
6-
jasmine_node_test(
7-
name = "test",
8-
srcs = glob(["*.spec.js"]),
9-
data = ["@npm//:bin_files"],
10-
node_modules = "@npm//:node_modules",
11-
)
12-
133
# Test what happens when only certain NPM packages are in our dependencies.
144
# These packages and their dependencies are copied to the execroot, but
155
# the rest are not.

e2e/node_loader_no_preserve_symlinks/BUILD.bazel

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ nodejs_test(
66
name = "test",
77
data = [
88
"node_loader_test.spec.js",
9+
"@npm//:node_modules",
910
],
1011
entry_point = ":node_loader_test.spec.js",
11-
node_modules = "@npm//:node_modules",
1212
templated_args = ["--nobazel_node_patches"],
1313
)

e2e/node_loader_preserve_symlinks/BUILD.bazel

+1-3
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,7 @@ nodejs_test(
66
name = "test",
77
data = [
88
"node_loader_test.spec.js",
9+
"@npm//:node_modules",
910
],
1011
entry_point = ":node_loader_test.spec.js",
11-
node_modules = "@npm//:node_modules",
12-
# legacy "node_modules" attribute means linker didn't see deps
13-
templated_args = ["--bazel_patch_module_resolver"],
1412
)

e2e/packages/BUILD.bazel

+3-3
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ VARIANTS = [
1717
data = [
1818
variant + ".spec.js",
1919
":test_version",
20+
"@e2e_packages_" + variant + "//:node_modules",
2021
],
2122
entry_point = ":%s.spec.js" % variant,
22-
node_modules = "@e2e_packages_" + variant + "//:node_modules",
2323
# On Windows, the yarn and npm variants fight over who creates the link
2424
# [link_node_modules.js] [Error: EEXIST: file already exists, mkdir 'C:\users\b\_bazel_b\p4se2lwa\execroot\e2e_packages\node_modules'] {
2525
# errno: -4075,
@@ -35,9 +35,9 @@ nodejs_test(
3535
data = [
3636
"npm_determinism.spec.js",
3737
"@e2e_packages_npm_install//:node_modules/jsesc/package.json",
38+
"@e2e_packages_npm_install_duplicate_for_determinism_testing//:node_modules",
3839
],
3940
entry_point = ":npm_determinism.spec.js",
40-
node_modules = "@e2e_packages_npm_install_duplicate_for_determinism_testing//:node_modules",
4141
# TODO(gregmagolan): fix this test on windows
4242
tags = ["fix-windows"],
4343
# TODO: use runfiles
@@ -49,9 +49,9 @@ nodejs_test(
4949
data = [
5050
"yarn_determinism.spec.js",
5151
"@e2e_packages_yarn_install//:node_modules/jsesc/package.json",
52+
"@e2e_packages_yarn_install_duplicate_for_determinism_testing//:node_modules",
5253
],
5354
entry_point = ":yarn_determinism.spec.js",
54-
node_modules = "@e2e_packages_yarn_install_duplicate_for_determinism_testing//:node_modules",
5555
# TODO(gregmagolan): fix this test on windows
5656
tags = ["fix-windows"],
5757
# TODO: use runfiles
+31-31
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,33 @@
1-
load("@build_bazel_rules_nodejs//:index.bzl", "nodejs_binary")
2-
load("@build_bazel_rules_nodejs//packages/jasmine:index.bzl", "jasmine_node_test")
1+
load("@build_bazel_rules_nodejs//:index.bzl", "js_library", "nodejs_binary", "nodejs_test")
32

4-
# Make the jasmine library available at runtime by exposing our node_modules
5-
# directory.
63
# This is "user-managed" dependencies - Bazel knows nothing about our package manager.
74
# We assume that developers will install the `node_modules` directory themselves and
85
# keep it up-to-date.
9-
# This rule simply exposes files in the node_modules directory to Bazel so it can read
10-
# them as inputs to processes it spawns.
11-
filegroup(
6+
# This rule simply exposes files in the node_modules directory to Bazel using js_library
7+
# with external_npm_package set to True so it can read them as inputs to processes it spawns.
8+
js_library(
129
name = "node_modules",
13-
srcs = glob([
14-
"node_modules/**/*.js",
15-
"node_modules/**/*.d.ts",
16-
"node_modules/**/*.json",
17-
]),
18-
)
19-
20-
filegroup(
21-
name = "decrement",
22-
srcs = ["decrement.js"],
23-
)
24-
25-
filegroup(
26-
name = "program",
27-
srcs = ["index.js"],
10+
srcs = glob(
11+
include = [
12+
"node_modules/**/*.js",
13+
"node_modules/**/*.d.ts",
14+
"node_modules/**/*.json",
15+
"node_modules/.bin/*",
16+
],
17+
exclude = [
18+
# Files under test & docs may contain file names that
19+
# are not legal Bazel labels (e.g.,
20+
# node_modules/ecstatic/test/public/中文/檔案.html)
21+
"node_modules/**/test/**",
22+
"node_modules/**/docs/**",
23+
# Files with spaces in the name are not legal Bazel labels
24+
"node_modules/**/* */**",
25+
"node_modules/**/* *",
26+
],
27+
),
28+
# Provide ExternalNpmPackageInfo which is used by downstream rules
29+
# that use these npm dependencies
30+
external_npm_package = True,
2831
)
2932

3033
nodejs_binary(
@@ -38,15 +41,12 @@ nodejs_binary(
3841
entry_point = ":index.js",
3942
)
4043

41-
jasmine_node_test(
44+
nodejs_test(
4245
name = "test",
43-
srcs = glob(["*.spec.js"]),
44-
node_modules = "//:node_modules",
45-
tags = ["no-local-jasmine-deps"],
46-
# user-managed deps don't expose the provider the linker needs to make require work
47-
templated_args = ["--bazel_patch_module_resolver"],
48-
deps = [
49-
":decrement",
50-
":program",
46+
data = [
47+
"decrement.js",
48+
"index.js",
49+
":node_modules",
5150
],
51+
entry_point = "index.spec.js",
5252
)
+9-10
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
1+
const _ = require('lodash');
12
const {increment} = require('./index');
23
const {decrement} = require('./decrement');
34

4-
describe('incrementing', () => {
5-
it('should do that', () => {
6-
expect(increment(1)).toBe(2);
7-
});
8-
});
5+
if (!_.eq(increment(1), 2)) {
6+
console.error('increment test failed');
7+
process.exitCode = 1;
8+
}
99

10-
describe('decrementing', () => {
11-
it('should do that', () => {
12-
expect(decrement(1)).toBe(0);
13-
});
14-
});
10+
if (!_.eq(decrement(1), 0)) {
11+
console.error('decrement test failed');
12+
process.exitCode = 1;
13+
}

examples/user_managed_deps/package.json

+2-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
{
22
"description": "runtime dependencies for program example",
3-
"devDependencies": {
4-
"jasmine": "~3.4.0",
5-
"jasmine-core": "~3.4.0",
6-
"v8-coverage": "1.0.9"
3+
"dependencies": {
4+
"lodash": "4.17.20"
75
},
86
"scripts": {
97
"pretest": "bazel run @nodejs//:yarn_node_repositories",

0 commit comments

Comments
 (0)