VITE: Не удалось загрузить сценарий модуля: ожидался сценарий модуля JavaScript, но сервер ответил MIME-типом «text/html». Строгий тип MIME

Я вижу следующую ошибку в браузере, когда запускаю свою веб-страницу для производства.

Не удалось загрузить сценарий модуля: ожидался сценарий модуля JavaScript, но сервер ответил MIME-типом «text/html». Строгая проверка типов MIME применяется для скриптов модулей согласно спецификации HTML.

Мой код — Reactjs, и я использую его из nodejs.

URL = https://qaentry.domain.com/It

Пакет VITE.json

  "scripts": {
    "dev": "vite --base=/pmo",
    "build": "tsc && vite build --base=/pmo",
    "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
    "preview": "vite  --base=/pmo preview"
  },

APP.tsx

const router = createBrowserRouter([
    {
      path: "/pmo",
      element: <LandingPage />,
    }
])

путь клиента

- client
---dist
-----assets
------ index--_a54pe.js

-----index.html

СЕРВЕР.js

app.get("*", (req, res) => {
  res.sendFile(path.join(__dirname, "../../client/dist/index.html"));
});

Конфигурация VITE

import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [react()],

  build:{
    outDir: "dist"
  }
})

Он работает с использованием localhost, но не в производстве. Можете ли вы дать мне несколько советов по решению этой проблемы?

🤔 А знаете ли вы, что...
React Native - это фреймворк, основанный на React, для создания мобильных приложений для iOS и Android.


1
362
1

Ответ:

Решено

Вы сказали Vite создать свое приложение, ожидая, что оно будет обслуживаться в базовом каталоге /pmo, но ваше экспресс-приложение обслуживает index.html в /.

Не меняя сборку Vite, вам нужно сделать несколько вещей...

  1. Получите Express для обслуживания статических ресурсов по ожидаемому пути.

    app.use('/pmo', express.static(path.join(__dirname, '../../client/dist'));
    
  2. Обслуживать index.html и любые динамические пути под ожидаемым путем.

    app.get('/pmo/*', (req, res) => {
      res.sendFile(path.join(__dirname, '../../client/dist/index.html'));
    });
    
  3. Сообщите BrowserRouter, что маршруты и ссылки должны размещаться под базовым именем

    const router = createBrowserRouter(
      [
        {
          path: '/',
          element: <LandingPage />,
        },
      ],
      {
        basename: import.meta.env.BASE_URL, // dynamically get from Vite config
      },
    );