问题:在Bazel沙盒中运行remix二进制文件存在问题。

huangapple go评论51阅读模式
英文:

Issues with running remix Binary in Bazel sandbox

问题

我在尝试将bazel作为remix的构建工具时遇到了问题。我已经能够在开发模式下运行remix,但目前无法使remix的构建工作。

在这个过程中,我遇到了一些错误。我将按照行发生的顺序列出错误以及我的修复措施(以防修复措施中引入新问题)。

第一个错误出现在bazel沙箱中,与@remix-run/dev的一个传递依赖项(@remix-run/dev->gunzip-maybe->browserify-zlib)有关。Bazel无法获取bazel存储库@npm__browserify-zlib__0.1.4。我认为这是一个bazel问题,并尝试使用browserify-zlib@0.2.0来覆盖browserify-zlib@0.1.4,这个方法有效。以下是用于参考的bazel错误:

ERROR: /Users/emmanuel/projects/bbbazel/WORKSPACE:89:17: fetching _npm_import rule //external:npm__browserify-zlib__0.1.4: Traceback (most recent call last):
        File "/private/var/tmp/_bazel_emmanuel/f416ba8913b741927ac435783e3163e0/external/aspect_rules_js/npm/private/npm_import.bzl", line 471, column 27, in _impl
                pkg_json = json.decode(rctx.read(pkg_json_path))
Error in decode: at offset 685, object has duplicate key: "main"
ERROR: /private/var/tmp/_bazel_emmanuel/f416ba8913b741927ac435783e3163e0/external/npm/BUILD.bazel:3012:6: @npm//:npm__browserify-zlib__0.1.4_source_directory depends on @npm__browserify-zlib__0.1.4//:source_directory in repository @npm__browserify-zlib__0.1.4 which failed to fetch. no such package '@npm__browserify-zlib__0.1.4//': at offset 685, object has duplicate key: "main"

接下来,在bazel沙箱中的另一个传递依赖项@remix-run/dev@remix-run/dev->xdm->deasync)引发了另一个错误。deasync npm包的安装生命周期挂钩调用了node-gyp二进制文件,而该文件在沙箱中不存在,导致bazel构建命令在设置期间失败。为了解决这个问题,我禁用了安装生命周期挂钩(我还在沙箱外部使用pnpm安装时禁用了它,remix构建命令执行得很好),但这导致了最后一个错误。以下是此错误的错误消息:

/Users/emmanuel/projects/bbbazel/BUILD.bazel:5:22: Running lifecycle hooks on npm package deasync@0.1.28 failed: (Exit 1): lifecycle-hooks.sh failed: error executing command (from target //:.aspect_rules_js/node_modules/deasync@0.1.28/lc) bazel-out/darwin_arm64-opt-exec-2B5CBBC6/bin/external/aspect_rules_js/npm/private/lifecycle/lifecycle-hooks.sh deasync ../../../external/npm__deasync__0.1.28/package ... (remaining 1 argument skipped)
/private/var/tmp/_bazel_emmanuel/f416ba8913b741927ac435783e3163e0/execroot/fleet/bazel-out/darwin_arm64-fastbuild/bin/external/aspect_rules_js/npm/private/lifecycle/min/node-gyp-bin/node-gyp: line 5: 1211: command not found
node-gyp not found! Please upgrade your install of npm! You need at least 1.1.5 (I think) and preferably 1.1.30.

> deasync@0.1.28 install /private/var/tmp/_bazel_emmanuel/f416ba8913b741927ac435783e3163e0/execroot/fleet/bazel-out/darwin_arm64-fastbuild/bin/node_modules/.aspect_rules_js/deasync@0.1.28/node_modules/deasync
> node ./build.js

===============================================================
Failure while running lifecycle hook for package 'deasync@0.1.28':

  Script:  'install'
  Command: `node ./build.js`

Stack trace:

spawn ENOENT
    at ChildProcess.<anonymous> (/private/var/tmp/_bazel_emmanuel/f416ba8913b741927ac435783e3163e0/execroot/fleet/bazel-out/darwin_arm64-fastbuild/bin/external/aspect_rules_js/npm/private/lifecycle/min/index.min.js:1:91930)
    at ChildProcess.emit (node:events:513:28)
    at maybeClose (node:internal/child_process:1100:16)
    at Process.ChildProcess._handle.onexit (node:internal/child_process:304:5)

最后一个错误表明remix存在一个bug,但由于它仅在bazel沙箱中出现,我认为这可能是一个涉及bazel和remix的问题。以下是显示的错误:

The following error is a bug in Remix; please open an issue! https://github.com/remix-run/remix/issues/new
Missing output for entry point
Error
    at Object.onCompileFailure (/private/var/tmp/_bazel_emmanuel/f416ba8913b741927ac435783e3163e0/sandbox/darwin-sandbox/1566/execroot/fleet/bazel-out/darwin_arm64-fastbuild/bin/node_modules/.aspect_rules_js/@remix-run+dev@1.12.0_@remix-run+serve@1.12.0/node_modules/@remix-run/dev/dist/cli/commands.js:180:13)
    at Object.compile (/private/var/tmp/_bazel_emmanuel/f416ba8913b741927ac435783e3163e0/sandbox/darwin-sandbox/1566/execroot/fleet/bazel-out/darwin_arm64-fastbuild/bin/node_modules/.aspect_rules_js/@remix-run+dev@1.12.0_@remix-run+serve@1.12.0/node_modules/@remix-run/dev/dist/compiler/remixCompiler.js:34:134)
    at async Object.build (/private/var/tmp/_bazel_emmanuel/f416ba8913b741927ac435783e3163e0/sandbox/darwin-sandbox/1566/execroot/fleet/bazel-out/darwin_arm64-fastbuild/bin/node_modules/.aspect_rules_js/@remix-run+dev

<details>
<summary>英文:</summary>

I&#39;ve encountered an issue trying to use bazel as a build tool for remix. I&#39;ve been able to run remix in dev mode but currently unable to get remix build to work.



I&#39;ve encountered a few errors that led up to this point. I&#39;ll list the errors in the order which they occurred with my fixes (just incase any of the fixes introduces a new issue)

First error in the bazel sandbox is related to a transitive dependency of `@remix-run/dev` (`@remix-run/dev-&gt;gunzip-maybe-&gt;browserify-zlib`). Bazel failed to fetch the bazel repository `@npm__browserify-zlib__0.1.4`. I assumed this was a bazel issue and tried to override `browserify-zlib@0.1.4` with `browserify-zlib@0.2.0`, which worked. Here is bazel error for reference:
```none
ERROR: /Users/emmanuel/projects/bbbazel/WORKSPACE:89:17: fetching _npm_import rule //external:npm__browserify-zlib__0.1.4: Traceback (most recent call last):
        File &quot;/private/var/tmp/_bazel_emmanuel/f416ba8913b741927ac435783e3163e0/external/aspect_rules_js/npm/private/npm_import.bzl&quot;, line 471, column 27, in _impl
                pkg_json = json.decode(rctx.read(pkg_json_path))
Error in decode: at offset 685, object has duplicate key: &quot;main&quot;
ERROR: /private/var/tmp/_bazel_emmanuel/f416ba8913b741927ac435783e3163e0/external/npm/BUILD.bazel:3012:6: @npm//:npm__browserify-zlib__0.1.4_source_directory depends on @npm__browserify-zlib__0.1.4//:source_directory in repository @npm__browserify-zlib__0.1.4 which failed to fetch. no such package &#39;@npm__browserify-zlib__0.1.4//&#39;: at offset 685, object has duplicate key: &quot;main&quot;
Next error in the bazel sandbox is related to another transitive dependency of @remix-run/dev (@remix-run/dev-&gt;xdm-&gt;deasync). The install lifecycle hook for the deasync npm package makes a call to the node-gyp binary which doesn&#39;t exist in the sandbox and the bazel build command fails during setup. To fix this, I disabled the install lifecycle hook (I also disabled it with a pnpm install outside the sandbox and the remix build command executed perfectly) which led to the final error. Here&#39;s the error message for this error:
/Users/emmanuel/projects/bbbazel/BUILD.bazel:5:22: Running lifecycle hooks on npm package deasync@0.1.28 failed: (Exit 1): lifecycle-hooks.sh failed: error executing command (from target //:.aspect_rules_js/node_modules/deasync@0.1.28/lc) bazel-out/darwin_arm64-opt-exec-2B5CBBC6/bin/external/aspect_rules_js/npm/private/lifecycle/lifecycle-hooks.sh deasync ../../../external/npm__deasync__0.1.28/package ... (remaining 1 argument skipped)
/private/var/tmp/_bazel_emmanuel/f416ba8913b741927ac435783e3163e0/execroot/fleet/bazel-out/darwin_arm64-fastbuild/bin/external/aspect_rules_js/npm/private/lifecycle/min/node-gyp-bin/node-gyp: line 5: 1211: command not found
node-gyp not found! Please upgrade your install of npm! You need at least 1.1.5 (I think) and preferably 1.1.30.

&gt; deasync@0.1.28 install /private/var/tmp/_bazel_emmanuel/f416ba8913b741927ac435783e3163e0/execroot/fleet/bazel-out/darwin_arm64-fastbuild/bin/node_modules/.aspect_rules_js/deasync@0.1.28/node_modules/deasync
&gt; node ./build.js

===============================================================
Failure while running lifecycle hook for package &#39;deasync@0.1.28&#39;:

  Script:  &#39;install&#39;
  Command: `node ./build.js`

Stack trace:

spawn ENOENT
    at ChildProcess.&lt;anonymous&gt; (/private/var/tmp/_bazel_emmanuel/f416ba8913b741927ac435783e3163e0/execroot/fleet/bazel-out/darwin_arm64-fastbuild/bin/external/aspect_rules_js/npm/private/lifecycle/min/index.min.js:1:91930)
    at ChildProcess.emit (node:events:513:28)
    at maybeClose (node:internal/child_process:1100:16)
    at Process.ChildProcess._handle.onexit (node:internal/child_process:304:5)
The final error suggests a bug with remix, but since it only occurs in the bazel sandbox I think it may be an issue that cuts across bazel and remix. The error returned is shown below:
The following error is a bug in Remix; please open an issue! https://github.com/remix-run/remix/issues/new
Missing output for entry point
Error
    at Object.onCompileFailure (/private/var/tmp/_bazel_emmanuel/f416ba8913b741927ac435783e3163e0/sandbox/darwin-sandbox/1566/execroot/fleet/bazel-out/darwin_arm64-fastbuild/bin/node_modules/.aspect_rules_js/@remix-run+dev@1.12.0_@remix-run+serve@1.12.0/node_modules/@remix-run/dev/dist/cli/commands.js:180:13)
    at Object.compile (/private/var/tmp/_bazel_emmanuel/f416ba8913b741927ac435783e3163e0/sandbox/darwin-sandbox/1566/execroot/fleet/bazel-out/darwin_arm64-fastbuild/bin/node_modules/.aspect_rules_js/@remix-run+dev@1.12.0_@remix-run+serve@1.12.0/node_modules/@remix-run/dev/dist/compiler/remixCompiler.js:34:134)
    at async Object.build (/private/var/tmp/_bazel_emmanuel/f416ba8913b741927ac435783e3163e0/sandbox/darwin-sandbox/1566/execroot/fleet/bazel-out/darwin_arm64-fastbuild/bin/node_modules/.aspect_rules_js/@remix-run+dev@1.12.0_@remix-run+serve@1.12.0/node_modules/@remix-run/dev/dist/compiler/build.js:33:3)
    at async Object.build (/private/var/tmp/_bazel_emmanuel/f416ba8913b741927ac435783e3163e0/sandbox/darwin-sandbox/1566/execroot/fleet/bazel-out/darwin_arm64-fastbuild/bin/node_modules/.aspect_rules_js/@remix-run+dev@1.12.0_@remix-run+serve@1.12.0/node_modules/@remix-run/dev/dist/cli/commands.js:175:3)
    at async Object.run (/private/var/tmp/_bazel_emmanuel/f416ba8913b741927ac435783e3163e0/sandbox/darwin-sandbox/1566/execroot/fleet/bazel-out/darwin_arm64-fastbuild/bin/node_modules/.aspect_rules_js/@remix-run+dev@1.12.0_@remix-run+serve@1.12.0/node_modules/@remix-run/dev/dist/cli/run.js:449:7)
Building Remix app in production mode...
Target //examples/remix:build failed to build

I've tried to run it outside bazel and with pnpm (I added the override to the package.json for browserify-zlip@0.2.0, then I ran pnpm instal with --ignore-scripts flag) and it builds fine.

I'm not sure if this is a bug with remix or a bazel issue. Has anyone else experienced this? Or does anyone having a working version of remix with bazel as the build tool?

I've created a minified version of the repository in the state of the 3rd error https://github.com/noelenwenede/bbbazel. Start up instructions are in the readme file.

答案1

得分: 1

这似乎是 browserify-zlib@0.1.4 的 tar.gz 文件确实包含了两个 JSON 条目。您可以按照文档中建议的方法,在 bazel 中通过修补 package.json 文件来解决这个问题。具体方法可以参考这里:
https://docs.aspect.build/rules/aspect_rules_js/docs/faq#why-cant-bazel-fetch-an-npm-package

英文:

It looks like the tar.gz of browserify-zlib@0.1.4 does indeed contains two json entries. You can fix that in bazel by patching the package.json as suggested in their docs:
https://docs.aspect.build/rules/aspect_rules_js/docs/faq#why-cant-bazel-fetch-an-npm-package

huangapple
  • 本文由 发表于 2023年2月8日 22:37:45
  • 转载请务必保留本文链接:https://go.coder-hub.com/75387352.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定