#node.js #reactjs #express #heroku #web-deployment
Вопрос:
https://peaceful-basin-17224.herokuapp.com/
Конечно, «это работает на моей машине».
Когда я смотрю на сеть, я вижу, что ресурсы загружаются из index.html но больше ничего. Кроме того, по какой-то причине npm run build
он, похоже, не работает. Я heroku bash
войду в приложение и не найду /frontend/build
Я возился с этим со вчерашнего вечера и чувствую, что не добился никакого прогресса. Любая помощь будет признательна!
Часть моей server.js
app.use(express.static(path.join(__dirname, '/frontend')));
app.get('/*', function (req, res) {
res.sendFile(path.join(__dirname, '/frontend/public', 'index.html'));
});
app.use(express.static(__dirname 'frontend'));
//Serve static assests if in production
if(process.env.NODE_ENV === 'production'){
//Set static folder
app.use(express.static('frontend/build'));
app.get('*', (req, res)=>{
res.sendFile(path.resolve(__dirname, 'frontend', 'public', 'index.html')) });
}
Вот моя посылка.json:
{
"name": "backend",
"version": "1.0.0",
"description": "",
"proxy": "http://localhost:3001",
"main": "server.js",
"scripts": {
"test": "echo "Error: no test specified" amp;amp; exit 1",
"start": "node server.js",
"server": "nodemon server.js",
"heroku-postbuild": "NPM_CONFIG_PRODUCTION=false npm install --prefix frontend amp;amp; npm run build"
},
"author": "",
"license": "ISC",
"dependencies": {
"@mailchimp/mailchimp_marketing": "^3.0.69",
"express": "^4.17.1",
"simple-react-modal": "^0.5.1"
}
}
Комментарии:
1. Устанавливаете ли вы необходимые зависимости для своего интерфейса перед запуском сборки?
2. Я думал, что об этом позаботится интерфейс npm install —prefix в моем heroku-postbuild. Разве это было бы не так? Я не имею в виду это саркастически, симпатичный новичок
3. Недавно я развернул приложение той же конфигурации, используя его в качестве параметров запуска в своем файле package.json
"start": "concurrently "npm run install amp;amp; npm run build" "npm run server""
, где установил и встроил оба компакт-диска в мой клиентский проект react.4. просто попробовал это и, столкнувшись с той же проблемой, это неправильно? спасибо, что так быстро ответили. «сценарии»: { «тест»: «эхо «Ошибка: не указан тест» amp;amp; выход 1″, «запуск»: «одновременно «npm запуск установки иamp; npm запуск сборки» «сервер запуска npm»», «heroku-postbuild»: «NPM_CONFIG_PRODUCTION=ложная установка npm-префиксный интерфейс иamp; npm запуск сборки» },
5. Этот сценарий довольно специфичен для моего проекта, используйте его в качестве ссылки и создайте свой собственный сценарий. Вы также можете прочитать о сценариях package.json здесь .
Ответ №1:
Я думаю, что вы можете удалить весь этот код:
app.use(express.static(path.join(__dirname, '/frontend')));
app.get('/*', function (req, res) {
res.sendFile(path.join(__dirname, '/frontend/public', 'index.html'));
});
app.use(express.static(__dirname 'frontend'));
//Serve static assests if in production
if(process.env.NODE_ENV === 'production'){
//Set static folder
app.use(express.static('frontend/build'));
app.get('*', (req, res)=>{
res.sendFile(path.resolve(__dirname, 'frontend', 'public', 'index.html')) });
}
и ставил только это:
app.use(express.static(path.join(__dirname, './frontend/build')));
Мой react.js папка имела название «интерфейс», и она находилась на одном уровне с моим server.js файл, вот почему это одна точка ./frontend/build
. И не удаляйте build
имя и не меняйте его на какое-либо другое имя.
И, пожалуйста, дайте мне знать, поможет ли этот ответ.