Я действительно борюсь с этим.
Я хотел бы реализовать SSR для улучшения SEO для своего приложения, но я застрял.
Я использовал CRA для клиентской стороны и express для сервера.
webpack успешно компилирует клиента, но когда я все запускаю, я получаю ошибки, связанные с моими файлами stati c, например less (я использую Ant Design, FWIW) и SVG .
Мне кажется, что я перепробовал практически все возможные перестановки, и, похоже, ничего не работает, поэтому я думаю, что мне не хватает чего-то фундаментального.
Мой файл webpack.config. js это:
const path = require('path');
module.exports = {
entry: ['babel-polyfill','./client/src/index.js'],
output: {
path: path.resolve('public'),
filename: 'bundle.js'
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
presets: [
"@babel/preset-env",
"@babel/preset-react"
]
}
},
},
{
test: /\.less$/, // match any .less file,
use: [
{loader: 'style-loader'},
{loader: 'css-loader'},
{ loader: "less-loader",
options: {
lessOptions: {
modifyVars: {
'@primary-color': '#0a1f8f',
'@secondary-color': '#124734',
'@tertiary-color': '#e04403',
'@info-color': '@primary-color',
'@success-color': '#124734',
'@processing-color': '@primary-color',
'@error-color': 'rgba(224, 20, 7, 1.0)',
'@highlight-color': '#f6dfa4',
'@warning-color': 'rgba(224, 20, 7, 1.0)',
'@normal-color': '#231f20',
'@white': '#fff',
'@black': '#231f20',
'@layout-header-background': '#231f20',
'@layout-header-color': '#f6dfa4'
},
javascriptEnabled: true
}
}
}
]
},
{
test: /\.(s*)css$/, // match any .scss or .css file,
use: [
{ loader: "style-loader" },
{ loader: "css-loader" }
]
},
{
test: /\.(png|jpe?g|gif|svg)$/i,
use: [
{
loader: 'file-loader',
},
],
}
]
}
};
My babel.config. js is:
module.exports = {
"presets": ['@babel/preset-react', ['@babel/preset-env', {
targets: {
"browsers": ["last 2 versions"],
node: "current"
}
}]],
"plugins": [["@babel/plugin-proposal-class-properties"], ["@babel/plugin-transform-runtime", {
"regenerator": true
}]]
}
Моя файловая структура: / server / ... / client / ... и мой npm команды (я пробовал обе, и ни одна из них не работает):
"dev": "NODE_ENV = development webpack -wd & NODE_ENV = development nodemon --exe c babel-node ./server/ server. js --ignore publi c "," server ":" nodemon --exe c babel-node ./server/server.js NODE_ENV = development --igno re publi c "
Вот пример получаемой мной ошибки:
@import '~antd/dist/antd.less';
^
SyntaxError: Invalid or unexpected token
Кроме того, если это помогает, когда я запускаю dev, я получаю сообщение об ошибке от babel-node ПЕРЕД webpack компилируется. Заранее спасибо!
Еще одно. Ошибка появляется, когда я импортирую свой файл App. js в свой файл serverRender, например:
const React = require('react');
const ReactDOMServer = require('react-dom/server');
const { StaticRouter } = require('react-router-dom');
const App = require('../client/src/App'); // <!-- commenting out this line and the error is removed, but of course that doesn't solve anything
const ky = require('ky/umd');
const serverRender = (req, sport, year, season, gameWeek, query, page, url, id) => {
console.log('req', req)
return ReactDOMServer.renderToString(
React.createElement(
'div',
null,
`Rendered on the server at ${new Date()}`
)
)
}
module.exports = {serverRender};