Я пытаюсь создать правило Bazel, которое будет обновлять номер версии в package.json
перед упаковкой с npm_package
.
Короче говоря, я хочу взять packages/server/package.tpl.json
и создать вывод package.json
от которого я могу зависеть в npm_package
.
Я пробовал кучу разных, включая ошибки, такие как read-only file system
, no such attribute 'out' in 'stamp_package_json' rule
и rule 'package_json' has file 'package.json' as both an input and an output
и текущую ошибку The following files have no generating action: packages/server/package.json
Структура моего проекта выглядит следующим образом:
/
/packages
/server
/src
BUILD.blaze
BUILD.blaze
package.tpl.json
/tools
/npm
BUILD.blaze
stamp_package_json.bzl
Это монорепо, поэтому в нем больше пакетов, чем просто сервера.
В packages/server/BUILD.blaze
Я использую два правила:
package(default_visibility=["//visibility:public"])
load("@build_bazel_rules_nodejs//:defs.bzl", "npm_package")
load("//tools/npm:stamp_package_json.bzl", "stamp_package_json")
stamp_package_json(
name = "package_json",
package_json = "package.tpl.json",
out = "package.json"
)
npm_package(
name = "red-server_package",
deps = [
":package_json",
"//packages/server/src:shared-red-server-library"
],
replacements = {"//packages/": "//"},
)
Если я переименую package.tpl.json
в package.json
и просто включу этот файл в npm_package
, он будет работать должным образом, за исключением того, что версия неверна.
Правило stamp_package_json
определено в tools/npm/stamp_package_json.bzl
:
def _impl(ctx):
package_json = ctx.file.package_json
# The command may only access files declared in inputs.
ctx.actions.run_shell(
inputs = [package_json],
outputs = [ctx.outputs.executable],
arguments=[package_json.path],
progress_message = "Stamping package.json file %s" % package_json.short_path,
command="jq '.version=\"123\"' $1 > $@")
stamp_package_json = rule(
implementation=_impl,
executable = True,
attrs = {
"package_json" : attr.label(allow_single_file=True),
"out": attr.output(mandatory = True)
}
)
Как уже упоминалось выше, в настоящее время выдается ошибка:
The following files have no generating action: packages/server/package.json
Кажется, я не могу понять, как поступитьс этим.Или, если мой подход хорошИли, если это может быть достигнуто каким-либо другим способом.
edit : написал сообщение в блоге о решении, с которым я закончил: https://medium.com/red-flag/developer-diary-day-1-bazel-build-system-with-monorepo-and-typescript-6f7a5a0a2b00