Развертывание 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, активы отсутствовали.