1

我有一个托管在 github 上的项目,它使用 Travis.ci 构建并发布到 GitHub:

https://github.com/Roaders/rpi-garage-door/releases/tag/v1.1.0

目前这只是在版本中添加了一个 tgz 文件。这包括运行所需的捆绑包依赖项(这背后的想法是,npm installnpm run build树莓派上真的很慢,所以解压缩 tar 的速度要快一百万倍)。由于 travis 使用 64 位机器,因此生成的 tar 文件只能在 64 位上使用,因此作为升级过程的一部分,我们需要运行npm rebuild- 这在 RPI 3 上仍然相当慢。

最初我想构建一个 32 位版本而不是 64 位版本,但我不知道如何在 travis 上配置它。我想我需要更改 npm 配置,所以我在我的.travis.yml

language: node_js
node_js: 12
script: npm run build-release

before_install:
  npm set npm_config_arch ia32

但这不起作用。

我想做的第二件事是使用不同版本的节点构建我的项目的多个版本,然后将所有这些 tgz 文件添加到发布中。

这个解决方案:

npm 包 sqlite3 的跨平台安装

非常接近我想要的,但对我不起作用,因为我需要重建的依赖项(epoll)不能用node-pre-gyp

4

1 回答 1

1

似乎另一个引用的答案几乎就在那里。不同的是我必须使用 node-gyp 来重建epoll。我还想重命名生成的 tgz 文件以区分二进制文件。这些脚本为我生成所需的文件:

"build-release": "npm run build",
"postbuild-release": "npm run build-node10-32 && npm run build-node12-32 && npm run build-node14-32",
"build-node10-32": "npx node-gyp rebuild -C node_modules/epoll/ --arch=arm --target=v10.21.0 && FILENAME=$(npm pack | tail -n 1) && mv $FILENAME \"node_10_32_$FILENAME\"",
"build-node12-32": "npx node-gyp rebuild -C node_modules/epoll/ --arch=arm --target=v12.18.2 && FILENAME=$(npm pack | tail -n 1) && mv $FILENAME \"node_12_32_$FILENAME\"",
"build-node14-32": "npx node-gyp rebuild -C node_modules/epoll/ --arch=arm --target=v14.5.0 && FILENAME=$(npm pack | tail -n 1) && mv $FILENAME \"node_14_32_$FILENAME\"",

注意:这实际上并不能解决我的具体问题,因为这仍然会生成在我的 32 位树莓派上不起作用的 64 位二进制文​​件。我认为建议的解决方法是使用--arch=ia32,但这会导致错误unrecognized command line option ‘-m32’; did you mean ‘-mbe32’?,但我认为修复超出了这个问题的范围。

于 2020-07-21T15:55:21.820 回答