Skip to content

Commit 02ecd7f

Browse files
committed
Bazel+React POC
0 parents  commit 02ecd7f

19 files changed

+2992
-0
lines changed

.bazelignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
node_modules
2+
frontend/node_modules

.bazelrc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# passes an argument `--skipLibCheck` to *every* spawn of tsc
2+
common --@aspect_rules_ts//ts:skipLibCheck=always

.bazelversion

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
7.5.0

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
bazel-*
2+
node_modules
3+
.pnpm-store

BUILD

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
load("@npm//:defs.bzl", "npm_link_all_packages")
2+
3+
npm_link_all_packages(name = "node_modules")

MODULE.bazel

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
module(name = "bazel_react_example")
2+
3+
bazel_dep(name = "rules_nodejs", version = "6.3.1")
4+
bazel_dep(name = "aspect_rules_js", version = "2.2.0")
5+
bazel_dep(name = "aspect_rules_ts", version = "3.5.0")
6+
7+
node = use_extension("@rules_nodejs//nodejs:extensions.bzl", "node", dev_dependency = True)
8+
node.toolchain()
9+
10+
npm = use_extension("@aspect_rules_js//npm:extensions.bzl", "npm", dev_dependency = True)
11+
npm.npm_translate_lock(
12+
name = "npm",
13+
pnpm_lock = "//:pnpm-lock.yaml",
14+
verify_node_modules_ignored = "//:.bazelignore",
15+
)
16+
use_repo(npm, "npm")
17+
18+
pnpm = use_extension("@aspect_rules_js//npm:extensions.bzl", "pnpm")
19+
20+
# Allows developers to use the matching pnpm version, for example:
21+
# bazel run -- @pnpm --dir /home/runner/work/rules_js/rules_js install
22+
use_repo(pnpm, "pnpm")
23+
24+
rules_ts_ext = use_extension("@aspect_rules_ts//ts:extensions.bzl", "ext", dev_dependency = True)
25+
rules_ts_ext.deps(
26+
# The integrity value will need to be updated along with typescript version changes in package.json.
27+
# `curl --silent https://registry.npmjs.org/typescript/5.4.5 | jq -r '.dist.integrity'`
28+
ts_integrity = "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==",
29+
ts_version_from = "//:package.json",
30+
)
31+
use_repo(rules_ts_ext, "npm_typescript")

MODULE.bazel.lock

Lines changed: 772 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

WORKSPACE

Whitespace-only changes.

frontend/BUILD

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
load("@aspect_rules_js//js:defs.bzl", "js_library", "js_run_binary")
2+
load("@aspect_rules_ts//ts:defs.bzl", "ts_project")
3+
load("@npm//:defs.bzl", "npm_link_all_packages")
4+
load("@npm//frontend:vite/package_json.bzl", "bin")
5+
6+
npm_link_all_packages(name = "node_modules")
7+
8+
ts_project(
9+
name = "project",
10+
srcs = glob(["src/**"]),
11+
assets = glob(["src/**/*.css"]),
12+
declaration = True,
13+
transpiler = "tsc",
14+
tsconfig = "tsconfig.json",
15+
deps = [
16+
":node_modules/@types/react",
17+
":node_modules/@types/react-dom",
18+
":node_modules/react",
19+
":node_modules/react-dom",
20+
":node_modules/react-router-dom",
21+
":node_modules/tailwindcss",
22+
],
23+
)
24+
25+
js_run_binary(
26+
name = "frontend",
27+
srcs = [
28+
"index.html",
29+
":project",
30+
],
31+
args = ["build"],
32+
mnemonic = "ViteBuild",
33+
out_dirs = ["dist"],
34+
tool = ":vite",
35+
visibility = ["//:__subpackages__"],
36+
)
37+
38+
bin.vite_binary(
39+
name = "vite",
40+
chdir = package_name(),
41+
data = ["vite.config"],
42+
)
43+
44+
js_library(
45+
name = "vite.config",
46+
srcs = ["vite.config.mjs"],
47+
data = [
48+
":node_modules/@tailwindcss/vite",
49+
":node_modules/@vitejs/plugin-react",
50+
":node_modules/tailwindcss",
51+
":node_modules/vite-plugin-svgr",
52+
":node_modules/vitest",
53+
],
54+
)

frontend/index.html

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="utf-8" />
5+
<meta name="viewport" content="width=device-width, initial-scale=1" />
6+
<title>React Hello World</title>
7+
</head>
8+
<body class="bg-white">
9+
<script type="module" src="/src/index.js"></script>
10+
<div id="root"></div>
11+
</body>
12+
</html>

0 commit comments

Comments
 (0)