首页 > 解决方案 > Firebase 部署 | 您需要启用 JavaScript 才能运行此应用程序。| “npm start”有效,但“firebase serve”无效

问题描述

我使用 React 和 Node Js 构建了一个应用程序,现在我想在 Firebase 上部署它。我是这些框架的新手,只是不知道出了什么问题。

在本地运行服务器时,一切正常,但是当我运行“firebase serve”时,我收到一条响应,上面写着“您需要启用 JavaScript 才能运行此应用程序”。

应用部署在这里 -> Expense Tracker

您可以在开发工具中查看 XHR 请求、事务。

提前致谢。

客户端/package.json:

{
  "name": "expense-tracker",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@testing-library/jest-dom": "^4.2.4",
    "@testing-library/react": "^9.4.1",
    "@testing-library/user-event": "^7.2.1",
    "axios": "^0.19.2",
    "react": "^16.12.0",
    "react-dom": "^16.12.0",
    "react-scripts": "3.4.0"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  },
  "proxy": "http://localhost:5000"
}

server.js:

const path = require('path');
const express = require('express');
const dotenv = require('dotenv');
const colors = require('colors');
const morgan = require('morgan');
const transactions = require('./routes/transactions');
const connectDB = require('./config/db');

dotenv.config({ path: './config/config.env' });

const app = express();

app.use(express.json());

if (process.env.NODE_ENV === 'development') {
    app.use(morgan('dev'));
}

app.use('/api/v1/transactions', transactions);

if (process.env.NODE_ENV === 'production') {
    app.use(express.static('client/build'));
    app.get('*', (req, res) => {
        res.sendfile(path.resolve(__dirname, 'client', 'build', 'index.html'));
    });
}

const PORT = process.env.PORT || 5000;

app.listen(PORT, console.log(`Server running in ${process.env.NODE_ENV} mode on port ${PORT}`.yellow.bold));

firebase.json:

{
  "hosting": {
    "public": "client/build",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "rewrites": [
      {
        "source": "**",
        "destination": "/index.html"
      }
    ]
  },
  "firestore": {
    "rules": "firestore.rules",
    "indexes": "firestore.indexes.json"
  }
}

包.json:

{
  "name": "expense-tracker",
  "version": "1.0.0",
  "description": "Backend for Expense Tracker",
  "main": "server.js",
  "scripts": {
    "start": "node server",
    "server": "nodemon server",
    "client": "npm start --prefix client",
    "dev": "concurrently \"npm run server\" \"npm run client\""
  },
  "author": "Keshavram Kuduwa",
  "license": "MIT",
  "dependencies": {
    "colors": "^1.4.0",
    "dotenv": "^8.2.0",
    "express": "^4.17.1",
    "firebase-admin": "^8.10.0",
    "mongoose": "^5.9.4",
    "morgan": "^1.9.1"
  },
  "devDependencies": {
    "concurrently": "^5.1.0",
    "nodemon": "^2.0.2"
  },
  "homepage": "."
}

标签: node.jsreactjsfirebasefirebase-realtime-databasegoogle-cloud-firestore

解决方案


我认为您正在尝试将此 express-node 实例作为 firebase 函数运行尝试做

exports.app = functions.https.onRequest(app);

在 server.js 文件的末尾

或者

创建 firebase 托管和 firebase 功能

在 firebase 托管中运行您的网站并将您的 node-express 实例作为 firebase 功能运行


推荐阅读