我有一个使用serverless-bundle
打包的节点14 AWS lambda函数,它反过来使用esbuild
。本地安装它可以很好地使用npm install
和npm ci
,删除node_modules
时也是如此。这段代码应该在AWS Lambda标准x86-64容器上运行。为了部署它,我设置了一个非常直接的GitHub操作工作流
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Setup Node.js 14.x
uses: actions/setup-node@v3
with:
node-version: 14.x
cache: 'npm'
- name: Install
run: npm ci
但是,install
步骤会立即失败,并显示:
Run npm ci
npm ERR! @esbuild/android-arm not accessible from esbuild
我不明白到底是怎么回事。当然,package-lock.json可能会受到影响,因为它是在我的Mac M1上生产的,因为它有一个@esbuild/darwin-arm64
条目,但是:
1.为什么GHA上的ubuntu-latest
需要android-arm
二进制文件?
1.如果问题是package-lock.json
是在一个架构上生成的,然后被用来安装在另一个架构上,那么我首先应该如何生成package-lock.json
呢?我不想运行我的整个开发环境dockerized...:(
我发现的唯一的线索是类似this的问题,建议是升级到Node 16(没有任何解释为什么它会有帮助).我可以这样做,但它会使我的环境非常混乱,在我的解决方案中,不同的组件有不同的nvm配置,所以我宁愿不这样做(特别是当我不明白 * 为什么 * 它会有帮助).
我确实看到我的package-lock.json
包含以下内容:
"esbuild": {
"version": "0.16.17",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.17.tgz",
"integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==",
"dev": true,
"requires": {
"@esbuild/android-arm": "0.16.17",
"@esbuild/android-arm64": "0.16.17",
"@esbuild/android-x64": "0.16.17",
"@esbuild/darwin-arm64": "0.16.17",
但是,esbuild
:s package.json
将这些变量列为optionalDependencies
:
"optionalDependencies": {
"@esbuild/android-arm": "0.16.17",
"@esbuild/android-arm64": "0.16.17",
"@esbuild/android-x64": "0.16.17",
"@esbuild/darwin-arm64": "0.16.17",
"@esbuild/darwin-x64": "0.16.17",
1条答案
按热度按时间fhg3lkii1#
这似乎与我的
npm
版本有关。我在本地有7.24.2,但在GHA上我得到了6.x,因为这是节点14中的默认npm
版本。这可能与处理optionalDependencies
的方式不同有关。解决方案是添加一个在GHA上升级
npm
的步骤:actions/setup-node
上有一个request来支持npm_version
,但目前还不支持,建议的解决方案如上所述。