代码之家  ›  专栏  ›  技术社区  ›  fredrik

更新Bazel规则中的package.json版本

  •  1
  • fredrik  · 技术社区  · 6 年前

    我正在尝试创建一个Bazel规则,该规则将更新 package.json 包装前 npm_package .

    总之,我想 packages/server/package.tpl.json 并创建输出 包.json 我可以依靠的 npm U包 .

    我试过很多不同的错误,比如 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
    

    这是一个monorepo,所以它有更多的包,而不仅仅是服务器。

    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 包.json 把文件放进去 npm U包 它按预期工作,只是版本不正确。

    这个 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

    我好像不知道该怎么处理。或者我的方法有什么好处。或者如果这能以任何其他方式实现。

    编辑 :写了一篇关于我最终得到的解决方案的博客文章: https://medium.com/red-flag/developer-diary-day-1-bazel-build-system-with-monorepo-and-typescript-6f7a5a0a2b00

    0 回复  |  直到 5 年前