Я исследовал эту проблему в течение последнего месяца и не нашел никаких полезных решений. В настоящее время я пытаюсь разместить веб-сайт, используя функции firebase, а также express.js и механизм просмотра EJS.
Я собираюсь рассмотреть вопрос о передаче статических файлов CSS в файлы EJS. Я просмотрел все, но не могу найти правильный ответ, который помогает.
У меня есть следующая файловая структура (внутри папки функций):
Вот мой index.js:
const functions = require('firebase-functions');
const express = require("express");
const ejs = require("ejs");
var path = require('path');
// // Create and Deploy Your First Cloud Functions
// // https://firebase.google.com/docs/functions/write-firebase-functions
//
// exports.helloWorld = functions.https.onRequest((request, response) => {
// response.send("Hello from Firebase!");
// });
var app = express();
app.set('view engine', 'ejs');
// app.use('/static', express.static('public'));
app.use(express.static(__dirname + "/public"));
app.get("/", (request, response) => {
response.render("test");
})
// app.listen(5000, () => {
// console.info("Active app on port 5000");
// });
exports.webApp = functions.https.onRequest(app);Страница, которую он отображает (test.ejs):
<html>
<head>
<link rel = "stylesheet" href = "style.css" type = "text/css">
</head>
<body></body>
</html>И, наконец, файл style.css:
html {
background-color: black;
}(Style.css делается так вместе с test.ejs только для тестирования, так как у меня были большие проблемы со всем этим)
Я попробовал большинство решений в Интернете, однако все они работают только при локальном запуске приложения express.js и нет с помощью команд firebase serve или deploy. Я полностью потерян в отношении этого, и любая помощь приветствуется.
Не могли бы вы поделиться структурой папок? Спасибо.
Вы нашли решение для этого? Я не думаю, что ответ @zemunkh правильный.
любой, кто сталкивался с этой проблемой, посмотрите мой вопрос и ответ здесь: stackoverflow.com/a/68346542?noredirect=1





Проблема связана с облачным планом Google.
Вначале все пользователи Firebase используют план Spark, который является абсолютно бесплатным. В последнее время Облако Google мог заблокировать некоторые функции, которые мы использовали бесплатно год назад.
Итак, вам нужно перейти на Облачная консоль Google, затем изменить план вашего проекта, который вы хотите развернуть. Затем, если вы не зарегистрировали свою платежную карту, вы должны сделать это для функции хостинг firebase или функции базы данных.

Через несколько минут он загружает все необходимые файлы, такие как стили CSS, файлы JS, которые отсутствовали при загрузке вашего развернутого веб-сайта.
Затем наслаждайтесь развернутым веб-сайтом. ;)
Я надеюсь, что это оно! У меня точно такая же проблема! Я могу без проблем обслуживать свои статические файлы на локальном хосте, но затем не загружаю их на хостинг Firebase. Я только что обновил свой платежный аккаунт в проекте (5 минут назад), но он все еще не работает. Скрестим пальцы, скоро заработает :)
Это странно. У меня всегда есть планы на Blaze, но это не работает. Не могли бы вы поделиться со мной своим кодом (конечно, не всем)? Я хочу увидеть структуру файлов и то, как вы настраиваете сервер. Спасибо.
Да, каталог в хост-приложении Firebase довольно интригующий. Вы должны проверить этот учебник. У меня работало, насколько я помню. youtube.com/watch?v=LOeioOKUKI8
Если вы столкнулись с этой проблемой в июле 2021 г. облачная функция firebase недоступна для плана Spark (бесплатно). Сначала вам необходимо обновить свой проект до плана Blaze (не беспокойтесь! Это план с оплатой по мере использования. В него включен план искры, поэтому с вас не будет взиматься плата, пока вы не превысите лимит). Чтобы перейти на план blaze, вам необходимо настроить платежную информацию на платформе Google Cloud, которая будет направляться автоматически, когда вы выберете обновление.
Вот мой код для настройки движка EJS View в функции firebase:
const functions = require('firebase-functions');
const express = require("express");
const app = express();
app.set("views",__dirname+"/tmp");
app.set("view engine","pug");
app.engine('pug', require('pug').__express);
app.get("/",p3p(p3p.recommended),function(req,res){
res.render("index");
});
app.get("/login",p3p(p3p.recommended),function(req,res){
res.render("login");
});
exports.main = functions.https.onRequest(app);
Я надеюсь, что вы сможете связать его с механизмом просмотра мопсов и настроить свои настройки в функции firebase для обслуживания статических файлов.
TL;DR проблемы:
На обычном хостинге NodeJS и Express необходимо указать каталог вашего статического контента. Поскольку хостинг firebase делает для вас хостинг статического контента (где каталог /public размещен в корне вашего домена),
Решение: вы можете сделать следующее:
app.use(express.static(__dirname + "/public")); (поскольку это устраняет попытку хостинга дубликат, которую делает для вас хостинг firebase)/public,Например
от это:
link(rel = "stylesheet", href = "/public/styles/my-styles.css")
к это:
link(rel = "stylesheet", href = "/styles/my-styles.css")
Вы можете проверить это:
Разместите свое приложение с оригиналом (ошибочные/неверные ссылки на статические ресурсы), затем перейдите к ссылке на статические ресурсы — вы должны получить 404 или как минимум сбой при загрузке ресурса.
Используя ту же «неверную» ссылку, опустите часть «.../public...» URL-адреса, ваш статический контент будет отображаться правильно.
Это означает, что хостинг firebase размещает все содержимое каталога /public в корневом каталоге вашего домена.
Затем внесите изменения, удалив функцию статического каталога app.use() и удалите все следы /public в ссылках на статическое содержимое (как показано выше).
Перейдите на свою страницу (включая измененные статические маршруты), ваша страница будет правильно загружаться со всеми вашими стилями, сценариями и т. д. (при условии, что у вас нет неисправного кода;))
Я вижу эту проблему с Cloud Run и экспресс-статическим промежуточным ПО. Вы в итоге нашли решение?