Next.js + TypeScript: SyntaxError в производственном режиме с пользовательским серверомJavascript

Форум по Javascript
Ответить Пред. темаСлед. тема
Anonymous
 Next.js + TypeScript: SyntaxError в производственном режиме с пользовательским сервером

Сообщение Anonymous »

Я работаю над полнофункциональным приложением, использующим Next.js и TypeScript, и мне нужно использовать Socket.IO для функций реального времени. Для этого я создал собственный сервер (src/server.ts) для настройки Socket.IO при запуске.
Все работает отлично в режиме разработки, когда я запускаю приложение, используя:

Код: Выделить всё

npm run dev
Однако, когда я пытаюсь запустить приложение в рабочем режиме, я сталкиваюсь с проблемами. Вот как я его запускаю:
  • Создаю приложение:

Код: Выделить всё

next build
  • Запуск сервера:

Код: Выделить всё

npm run start
Сервер запускается без ошибок, но при доступе к любой странице в браузере появляется следующая ошибка:

Код: Выделить всё

SyntaxError: Invalid left-hand side in for-in loop: Must have a single binding.
at  (.next/server/chunks/675.js:3414)
Вот мой файл src/server.ts:

Код: Выделить всё

import next from "next";
import { Server } from "socket.io";
import logger from "./logger";

const dev = process.env.NODE_ENV !== "production";
const hostname = process.env.APP_HOSTNAME;
const port = Number(process.env.APP_PORT) || 3000;

const app = next({ dev, hostname, port });
const handler = app.getRequestHandler();

app
.prepare()
.then(() => {
// eslint-disable-next-line @typescript-eslint/no-misused-promises
const server = createServer(handler);

const io = new Server(server, {
cors: {
origin: "*",
methods: ["GET", "POST"],
},
});

io.on("connection", (socket) => {
logger.info("A client connected");

socket.on("disconnect", () => {
logger.info("Client disconnected");
});
});

server
.once("error", (err) => {
console.error(err);
process.exit(1);
})
.listen(port, () => {
logger.info(`Server started on http://${hostname}:${port}`);
});
})
.catch((error: unknown) => {
logger.error("Error starting the server: ", error);
process.exit(1);
});

Я подозреваю, что проблема связана с тем, как Next.js обрабатывает выходные данные сборки в производственном режиме. Я новичок в Next.js и TypeScript, поэтому могу упустить что-то важное. Я также попытался добавить вывод: «автономный», но проблема все еще возникает.
package.json

Код: Выделить всё

{
"name": "nextjsapp",
"version": "1.0.0",
"description": "Template for web apps",
"main": "dist/index.js",
"scripts": {
"dev": "ts-node src/server.ts",
"build": "next build",
"start": "NODE_ENV=production ts-node src/server.ts",
"lint": "next lint",
"prettier:format": "prettier --write .",
"prettier:check": "prettier --check .",
"component-tests": "cypress run --component",
"e2e:chrome": "cypress run --e2e --browser chrome",
"e2e:edge": "cypress run --e2e --browser edge",
"commitlint": "commitlint --from develop --to HEAD",
"check-updates": "npx npm-check-updates -u",
"test": "jest",
"storybook": "storybook dev -p 6006",
"build-storybook": "storybook build",
"prepare": "if [ \"$SKIP_HUSKY\" = \"true\" ]; then echo 'Skipping husky'; else husky;  fi"
},
"private": true,
"dependencies": {
"@braintree/sanitize-url": "7.1.0",
"@mdi/js": "7.4.47",
"@mdi/react": "1.6.1",
"@newrelic/next": "0.10.0",
"@serwist/next": "9.0.11",
"classnames": "^2.5.1",
"dayjs": "1.11.13",
"kafkajs": "2.2.4",
"mssql": "11.0.1",
"newrelic": "12.9.0",
"next": "15.1.2",
"next-auth": "4.24.11",
"react": "19.0.0",
"react-dom": "19.0.0",
"react-toastify": "11.0.2",
"sass": "^1.83.0",
"sharp": "0.33.5",
"socket.io": "^4.8.1",
"socket.io-client": "^4.8.1"
},
"devDependencies": {
"@chromatic-com/storybook": "^3.2.3",
"@commitlint/cli": "19.6.1",
"@commitlint/config-conventional": "19.6.0",
"@eslint/js": "9.17.0",
"@storybook/addon-essentials": "^8.4.7",
"@storybook/addon-interactions": "^8.4.7",
"@storybook/addon-onboarding": "^8.4.7",
"@storybook/blocks": "^8.4.7",
"@storybook/nextjs": "^8.4.7",
"@storybook/react": "^8.4.7",
"@storybook/test": "^8.4.7",
"@testing-library/dom": "^10.4.0",
"@testing-library/jest-dom": "^6.6.3",
"@testing-library/react": "^16.1.0",
"@types/jest": "^29.5.14",
"@types/jira-client": "7.1.9",
"@types/mssql": "9.1.5",
"@types/newrelic": "9.14.6",
"@types/node": "22.10.2",
"@types/react": "19.0.2",
"@types/react-dom": "19.0.2",
"@types/sharp": "0.31.1",
"cypress": "13.17.0",
"dotenv": "16.4.7",
"eslint": "9.17.0",
"eslint-config-next": "15.1.2",
"eslint-config-prettier": "9.1.0",
"eslint-plugin-cypress": "4.1.0",
"eslint-plugin-storybook": "^0.11.1",
"husky": "^9.1.7",
"jest": "^29.7.0",
"jest-environment-jsdom": "^29.7.0",
"jira-client": "8.2.2",
"npm-check-updates": "^17.1.11",
"prettier": "3.4.2",
"serwist": "9.0.11",
"start-server-and-test": "2.0.9",
"storybook": "^8.4.7",
"ts-node": "^10.9.2",
"typescript": "5.7.2",
"typescript-eslint": "8.18.1"
},
"browserslist": [
">0.3%",
"last 2 versions",
"not dead"
],
"eslintConfig": {
"extends": [
"plugin:storybook/recommended"
]
}
}

Проверил документацию по пользовательским серверам, но не нашел ничего конкретного по этой проблеме. Искал в интернете похожие проблемы, но точного совпадения не нашел. Кто-нибудь сталкивался с этой проблемой или чем-то подобным? Что может быть причиной этой синтаксической ошибки?
Заранее спасибо!

Подробнее здесь: https://stackoverflow.com/questions/793 ... tom-server
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • HydrationError при использовании Next-I18N с Next.js и TypeScript
    Anonymous » » в форуме Javascript
    0 Ответы
    98 Просмотры
    Последнее сообщение Anonymous
  • Неправильный тип MIME с пользовательским сервером next.js
    Anonymous » » в форуме CSS
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Проблема несоответствия типа данных в приложении React с TypeScript в производственном сервере
    Anonymous » » в форуме C#
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Не могу получить данные на стороне сервера next.js только в производственном домене
    Anonymous » » в форуме Php
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Не могу получить данные на стороне сервера next.js только в производственном домене
    Anonymous » » в форуме Javascript
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Javascript»