Импортировать React в Node.js. SyntaxError: Неожиданный экспорт токена.
Я пытаюсь реализовать SSR с помощью Node.js и React, следуя этому примеру https://github.com/babel/example-node-server как указано в официальных документах Babel здесь http://babeljs.io/docs/usage/cli/
Для разработки я использую babel-node
; для производства я хочу перенести мой сервер с babel и запустить его с node
:
package.json
"scripts": {
"start": "node ./dist/server/index.js",
"dev:server": "nodemon ./src/server/index.js -x babel-node",
"build:server": "babel ./src/server -d ./dist/server --copy-files -s inline"
},
"babel": {
"presets": [
"env",
"react",
"stage-2"
],
"plugins": [
"transform-decorators-legacy"
]
}
Сервер написан с синтаксисом ES6:
ЦСИ / сервер /index.js
import 'babel-polyfill'
import './config'
import Express from 'express'
import bootstrap from './bootstrap'
const app = Express()
bootstrap(app)
export default app
Затем по какому-то маршруту я импортирую мои компоненты React, чтобы отобразить их в HTML по запросу:
SRC / сервер / маршруты /admin.js
import { Router } from 'express'
import React from 'react'
import createHistory from 'history/createMemoryHistory'
import { renderToString } from 'react-dom/server'
import { Provider } from 'react-redux'
import { StaticRouter, matchPath } from 'react-router'
import configureStore from '../../../src/admin/store'
import routes from '../../../src/admin/routes'
import Root from '../../../src/admin/containers/Root'
// etc.
Выдается ошибка, когда сервер пытается импортировать компоненты React.
./src/admin/store/index.js:11
export default configureStore
^^^^^^
SyntaxError: Unexpected token export
Я пытался с помощью babel-register
на сервере, и он работает, но не рекомендуется использовать его в производственном режиме, поэтому я бы не стал этого делать.
Кроме того, при проверке кода встроенного сервера я нахожу:
DIST / сервер / маршруты /admin.js
var _store = require('../../../src/admin/store');
Это означает, что он все еще ссылается на src
папка. В идеале я хотел бы как-то включить эти модули во встроенный серверный код, чтобы я мог безопасно удалить src
папка из производственной среды, оставляя только dist
,
редактировать
Отличается от Babel 6 CLI: неожиданный экспорт токенов?
1 ответ
Это потому, что вы переносите только ./src/server
и не ./src/admin
, Затем в ./src/server
у тебя есть export
ключевое слово не переведено Бабелем и export
Ключевое слово не поддерживается Node - чтобы узнать почему, посмотрите эти ответы:
- Можно ли использовать пакет Babel npm для серверного приложения node.js?
- Почему есть спецификация для синхронизации и асинхронных модулей?
- Экспорт модуля Node из результата обещания
Вам нужно перенести весь код, который использует синтаксис, который изначально не поддерживается Node, а не только его часть.
Добавление такого сценария в ваш package.json может помочь, в зависимости от того, как ./src
а также ./dist
организовано:
"build:all": "babel ./src -d ./dist --copy-files -s inline"
Конечно, не зная, что у вас есть в ./src
Помимо server
а также admin
трудно дать вам конкретное решение - но это хорошее направление для начала.