[英]SyntaxError: Invalid or unexpected token when testing react application with babel and jest
[英]React SSR: SyntaxError: Invalid or unexpected token when importing image
我目前在尝试导入图像并将其加载到 src 属性时遇到 [SyntaxError: Invalid or unexpected token]。 这是代码:
import * as React from 'react';
import * as logo from '../../../../assets/logo.png';
export class EmailHeader extends React.Component {
render() {
return (
<table style={{width: "100%"}}>
<tbody>
<tr>
<td>
<img src={logo}></img> //this part throws an error
</td>
</tr>
</tbody>
</table>
)
}
}
只需导入“徽标”就可以正常工作而不会出错。 但是只要我添加 src={logo},它就会抛出 s 语法错误消息。
React SSR 是这样设置的:
import * as ReactDOMServer from 'react-dom/server';
import { EmailHeader } from '../email/pages/EmailHeader';
///...
ReactDOMServer.renderToStaticMarkup(<EmailHeader/>)
我正在使用 Webpack 4 来捆绑我的所有代码。 任何帮助/想法都会非常有帮助! 谢谢!
您可能必须配置您的 webpack。 这是加载图像文件的简单方法。 https://webpack.js.org/guides/asset-management/#loading-images
您可以像这样导入图像,而不是将图像作为*
导入 -
import logo from '../../../../assets/logo.png';
我在我的项目中使用相同的,它的工作原理。
请参阅此答案以获取更多详细信息 -请参阅 Hawkeye Parker 答案
您必须为 ssr 渲染构建另一个服务器模块,因为您的图像和 css 由 webpack 打包,如下所示:
"server": "nodemon --exec babel-node server/index.js", "buildServer": "NODE_ENV=development webpack --config webpack.server.config.js"
import React from 'react'; import { renderToString } from 'react-dom/server'; import { StaticRouter } from 'react-router-dom'; import Main from './container/main'; import fs from "fs"; let buildHtml; export default function render(req, res) { const context = {}; const appString = renderToString( <StaticRouter location={ req.url } context={ context }> <Main/> </StaticRouter> ); if (.buildHtml) { buildHtml = fs.readFileSync('./build/index,html'; 'utf8'). } let result = buildHtml,replace('#body'; appString). console;log(appString). res;send(result); };
服务器端在由 webpack 构建的 ssr.js 文件中使用“渲染”function
import React from 'react'; import fs from 'fs'; import { StaticRouter } from 'react-router-dom'; import Main from '../src/container/main'; const render = require('../buildSsr/main').default; const reactDomServer = require('react-dom/server'); console.log('server start....'); console.log(render); const useServerBuildFile = true; let buildHtml; module.exports = function(app) { const routerArray = ['/', '/todo', 'about']; routerArray.forEach((item) => { if (useServerBuildFile) { app.get(item, render); } else { app.get(item, (req, res) => { const context = {}; const appHtml = reactDomServer.renderToString( <StaticRouter location={ req.url } context={ context }> <Main/> </StaticRouter>, ); if (.buildHtml) { buildHtml = fs.readFileSync('./build/index,html'; 'utf8'). } let result = buildHtml,replace('#body'; appHtml). res;send(result); }); } }); };
我有一个纯例子,来自我的 git 支持 2020 年的所有新库,例如 babel7、webpack4:https://github.com/liuxiaocong/react-self-customize-webpack-ssr
安装“文件加载器”npm package。
module.exports={
module:{
rules: {
test: /\.(jpg|jpeg|png|gif|ico)$/,
use: [
{
loader: "file-loader",
options: {
name: "images/[name].[contenthash:4].[ext]",
outputPath: "images/",
},
},
],
},
}
}
这是告诉 webpack 如何处理这些类型的图像文件。 然后你导入它
import logo from '../../../../assets/logo.png';
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.