Обновление версии package.json в правиле Базеля - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь создать правило 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...