在Bazel项目中,若要指定自定义package.json文件位置,需使用rules_nodejs
规则,并且必须在nodejs_binary
或nodejs_test
规则中定义。
以下是示例代码,以演示如何解决此问题:
load("@npm//@bazel/ibazel:ibazel.bzl", "ibazel")
load("@npm_bazel_typescript//:index.bzl", "ts_library")
load("@io_bazel_rules_nodejs//nodejs/rules.bzl", "nodejs_binary")
ts_library(
name = "index",
srcs = glob(["*.ts"]),
deps = [
"@npm//typescript",
"@npm//lodash",
],
)
nodejs_binary(
name = "server",
entry_point="server.js",
data = glob(["**/*.yaml"])+glob(["**/*.json"]), # 可以让bazel可以正确的拷贝json/yaml文件到输出的binary目录下
deps = [
"//src:loadWithCustomPackageJson",
"@npm//npm",
"@npm//@babel/core",
"@npm//@babel/preset-env",
]
)
此处,我们为我们的Bazel项目中的nodejs_binary
规则定义了一个自定义的package.json文件。你可以看到在nodejs_binary
规则中定义了一个自定义依赖loadWithCustomPackageJson
,并且loadWithCustomPackageJson
的依赖关系中包含了这个自定义的package.json文件。
通过以上解决方法,我们可以使用自定义的package.json文件并正确解析模块。