我觉得这没用,因为我的难题已经在几个不同的线程中讨论过了,但没有任何效果.

我在AWS Elastic Beanstalk上部署了一个ExpressJS/node服务器.当我几周前第一次try 部署时,我无法让它运行,直到我最终意识到我的许多依赖项之一(一个叫做Sharp的惊人图像大小调整工具)正在 destruct 它.我卸载了它,并删除了它在服务器中的用法.一切都很好.但我真的需要它——当我在本地设备上运行服务器时,它工作得很好.

但当我重新安装和部署时,我会出现以下错误:

npm ERR! path /var/app/staging/node_modules/sharp
npm ERR! command failed
npm ERR! command sh -c (node install/libvips && node install/dll-copy && prebuild-install) || (node install/can-compile && node-gyp rebuild && node install/dll-copy)
npm ERR! sharp: Are you trying to install as a root or sudo user? Try again with the --unsafe-perm flag
npm ERR! sharp: Please see https://sharp.pixelplumbing.com/install for required dependencies
npm ERR! sharp: Installation error: EACCES: permission denied, mkdir '/root/.npm'

网络上的大多数答案都是将unsafe perm=true作为环境变量设置在名为的文件中.npmrc,使用.配置文件.向根用户授予写入权限的ebextensions...在谷歌上搜索任何与锋利而有弹性的豆茎有关的东西,或者我的具体错误,都会给我带来无尽的紫色链接.但什么都没起作用.

编辑:我没有继续努力让Sharp工作,而是找到了另一种叫做Jimp的工具.可能不如夏普强大,但我真的需要调整尺寸,它可以做到这一点,所以如果有人因为这个问题而发飙,请考虑省go 自己的头痛,然后 Select Jimp.

推荐答案

请参考我在以下GitHub问题(Fails to install on AWS ElasticBeanstalk with node16 #3221)中提供的"变通"解决方案,以获得完整的解释.

Solution:

  1. 在应用程序包的根目录中创建以下平台挂钩路径.
  • .平台/挂钩/预制
  • .平台/配置挂钩/预构建
  1. 创建以下具有执行权限(chmod+x)的bash脚本(00_npm_install.sh).
#!/bin/bash
cd /var/app/staging
sudo -u webapp npm install sharp
  1. 验证应用程序包 struct .

示例项目 struct :

~/my-app/
├── app.js
├── index.html
├── .npmrc_bkp
├── package.json
├── package-lock.json
├── .platform
│   ├── confighooks
│   │   └── prebuild
│   │       └── 00_npm_install.sh
│   └── hooks
│       └── prebuild
│           └── 00_npm_install.sh
└── Procfile
  1. 部署应用程序!

希望有帮助!

Node.js相关问答推荐

对接Nestjs/VueJS应用程序

Node.js中Redis的并发问题

如何修复PostgreSQL和NodeJS/NestJS应用程序之间的日期时间和时区问题?

如何在Sequelize with Postgres中将m:n关联表ID从整数迁移到UUID?

如何模拟 mysql2 `getConnection`

使用单个 MongoDB 查询更新多个元素

SvelteKit应用程序立即退出,没有错误

TypeScript Eslint警告了一个AWS客户端构造函数(dynamodb),但没有警告另一个(s3)

Mongoose post中间件触发deleteMany

运行 cypress 测试时如何指定 .env 文件用于我的开发服务器?

我应该如何解决这个 Angular node 包模块依赖冲突?

nuxt:在 docker 镜像中找不到

Aptana Studio 是否有 NodeJS 插件?

mongoose 模式中的嵌套对象

Chrome 浏览器未将 if-modified-since 标头发送到服务器

在 Node.js 与 Cron 作业(job)中设置间隔?

如何在 Node.js 中等待子进程完成

如何将子集合添加到 Firestore 中的文档?

create-react-app,安装错误(找不到命令)

chart.js 无法创建图表:无法从给定项目获取上下文