Развертывание Nodejs на Heroku не обслуживает статические файлы, находящиеся в подпапках
Я развертываю приложение NodeJs, используя Heroku. Все работает отлично, за исключением небольшой проблемы, обслуживающей статические файлы.
У меня есть следующая конфигурация
app.use(express.static(__dirname + '/htdocs'));
Он отлично работает, за исключением случаев, когда я пытаюсь использовать статические файлы, расположенные в подпапках.
www.example.com/bar.js//это файл /htdocs/bar.js
www.example.com/foo/bar.js//это не может найти файл /htdocs/foo/bar.js
Я забыл сказать, что в моей локальной среде все работает нормально, может быть что-то с герокой, но я не могу найти причину. Раньше у кого-то была эта проблема? Решения?
Спасибо!
Ответы
Ответ 1
Наконец, я нашел решение.
Я решил, что просто добавлю версию npm в свой пакет package.json.
{
"name": "bla",
"version": "0.0.1",
"dependencies": {
"express": "3.2.6"
},
"engines": {
"node": "0.10.11",
"npm": "1.2.25"
}
}
Ответ 2
По-видимому, как объясняют в этом вопросе: Героку (Cedar) + Node + Express + Jade Клиентские файлы javascript в подкаталоге работают локально с мастером + завиток, но не при нажатии к Heroku, вы не можете использовать __dirname с Heroku.
Альтернативой может быть:
//В верхней части вашего web.js
process.env.PWD = process.cwd()
//Тогда app.use(express.static(process.env.PWD + '/htdocs));
Ответ 3
Если ни одно из этих решений не работает, проверьте мое решение.
Убедитесь, что вспомогательные каталоги вашего каталога добавлены в репозиторий Git.
Ответ 4
Я боролся с этим некоторое время и должен был вернуться к использованию /public (from/dist), поскольку статическая папка - отлично работает сейчас
Ответ 5
В моем случае у меня был шаг в моей сборке, который фактически уничтожал папку /public
, а затем добавлял обратно в bundle.js и bundle.css.
Итак, на моем местном я этого не видел, но когда он был развернут в Heroku, активы отсутствовали.