Amazon Elastic Beanstalk npm can not find package.json

Я очень новичок в веб-сервисах amazon, и я пытаюсь настроить приложение node.js на их эластичный beanstalk. Я установил экземпляр и загрузил/развернул сайт, но пока здоровье "Ок", журналы node.js показывают это повторение примерно 30 раз:

npm ERR! enoent ENOENT: no such file or directory, open '/var/app/current/package.json'
npm ERR! enoent This is most likely not a problem with npm itself
npm ERR! enoent and is related to npm not being able to find a file.
npm ERR! enoent 

npm ERR! Please include the following file with any support request:
npm ERR!     /var/app/current/npm-debug.log
npm ERR! Linux 4.1.13-19.31.amzn1.x86_64
npm ERR! argv "/opt/elasticbeanstalk/node-install/node-v4.2.3-linux-x64/bin/node" "/opt/elasticbeanstalk/node-install/node-v4.2.3-linux-x64/bin/npm" "start"
npm ERR! node v4.2.3
npm ERR! npm  v2.14.7
npm ERR! path /var/app/current/package.json
npm ERR! code ENOENT
npm ERR! errno -2
npm ERR! syscall open

Проблема в том, что мой package.json существует, потому что я сгенерировал его с npm init. Любые идеи о том, почему это невозможно найти? Вот пакет.json

{
    "name": "testwebsite",
    "version": "0.0.1",
    "scripts": {
        "start": "node server.js"
    },
    "dependencies": {
        "body-parser": "^1.13.3",
        "express": "^4.13.3",
        "express-session": "~1.0.0",
        "socket.io": "^1.3.7"
    },
    "description": "my website",
    "author": "Matt",
    "engines": {
        "node": ">=0.10.0"
    },
    "main": "server.js",
    "devDependencies": {},
    "license": "ISC"
}

Ответ 1

Из официального потока AWS [1] появляется (и это была моя проблема), что вы могли бы запереть каталог верхнего уровня, а не застегивать сам источник.

Например, у вас могут быть все ваши файлы в папке "Проект". Вместо того, чтобы застегивать "Проект", вы должны заархивировать и загрузить содержимое "Проекта".

[1] Привет, Гость

Ответ 2

У меня была проблема такая же, как или очень похоже на это, и было вызвано тем фактом, что мой код прослушивал пользовательский порт, а не тот, который Elastic Beanstalk устанавливает как переменную среды (8081).

Я установил этот параметр в порт рядом с моим app.js или server.js сразу после создания экспресс-приложения. Например:

var app = express();
app.set('port', (process.env.PORT || 5000)); // 5000 was my original port

Затем, используя этот порт в методе app.listen вместо моего собственного номера порта:

app.listen(app.get('port'), function () {
    console.log('Server has started! http://localhost:' + app.get('port') + '/');
});

Подробнее здесь: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_nodejs.container.html#nodejs-platform-proxy

Ответ 3

У меня была и эта нечетная ошибка на AWS EB. Обычно я развертывал с использованием CLI.

пару вещей, чтобы попробовать.

  1. убедитесь, что package.json не находится в вашем файле.gitignore, чтобы убедиться, что он привязан к вашему репозиторию. EB использует историю git commit, чтобы решить, что делать с почтой и отправлять. Если это не включено, это не на серверах AWS

  2. Я использовал вариант экземпляра t2.nano(512 МБ пространства) для EC, и это, казалось, было проблемой, потому что у меня было много модулей в моем пакете. json. Не был уверен, что это была основная проблема моих проблем, но мои сообщения об ошибках изменились, когда я обновился до экземпляра, который имел не менее 1 ГБ пространства.

надеюсь это поможет