antd的babel-plugin-import插件,服务端渲染时,如果babel中配置了import会报错,删掉正常启动
使用express服务端渲染,如果babel中配置了import会报错,删掉就可以正常启动。
但是这个配置,用webpack,不管是devServer,还是编译文件,都正常。只有在尝试用express启动的时候会包错
就是在.babelrc文件中的plugins的这段代码:
[
"import",
{
"libraryName": "antd",
"libraryDirectory": "es",
"style": true
}
]
(function (exports, require, module, __filename, __dirname) { import '../../style/index.less';
^^^^^^^^^^^^^^^^^^^^^^^^
SyntaxError: Unexpected string
at new Script (vm.js:79:7)
at createScript (vm.js:251:10)
at Object.runInThisContext (vm.js:303:10)
at Module._compile (internal/modules/cjs/loader.js:657:28)
...
我的相关配置文件:
.babel
{
"presets": ["@babel/preset-env", "@babel/preset-react"],
"plugins": [
"@babel/plugin-proposal-object-rest-spread",
"@babel/plugin-transform-runtime",
[
"import",
{
"libraryName": "antd",
"libraryDirectory": "es",
"style": true
}
]
]
}
server.js
require('ignore-styles');
var fs = require('fs');
var babelConfig = JSON.parse(fs.readFileSync('./.babelrc'));
require('@babel/register')(babelConfig);
require('./express.js');
express.js
import path from 'path';
import fs from 'fs';
import express from 'express';
import React from 'react';
import {renderToString} from 'react-dom/server';
import {StaticRouter} from 'react-router-dom';
import Home from './src/component/Home';
const ROOT_PATH = path.resolve(__dirname);
const BUILD_PATH = path.resolve(ROOT_PATH, 'build');
const app = express();
app.use(express.static(BUILD_PATH));
app.use('*', function (req, res) {
let context = {};
const template = renderToString(
<StaticRouter location={req.url} context={context}>
<Home/>
</StaticRouter>
);
if(context.status === 404) {
res.status(404);
}
fs.readFile(path.resolve(BUILD_PATH + '/index.html'), 'utf8', (err, data) => {
if (err) {
console.error(err);
return res.status(500).send('An error occurred');
}
return res.send(
data.replace('<div id="root"></div>', `<div id="root">${template}</div>`)
)
});
});
const server = app.listen(3000, () => {
const host = server.address().address;
const port = server.address().port;
console.log('server is start at', host, port);
});
启动 node ./server.js
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我是直接在webpack.config里配的。
删除
.babelrc
文件,新建babel.config.js
文件在根目录babel.config.js
:服务端入口文件:
主要依靠
babel.config.js
中的isBabelRegister
方法判断是否是服务端渲染