Express용 React View 템플릿 엔진
17101 단어 typescriptjavascriptexpressreact
TLDR
props
짭짤한 / 반응-ssr
SSR을 보기 템플릿 엔진으로 반응
개요
props
props
process.env.NODE_ENV !== 'production'
장점과 단점
장점
보기 템플릿 엔진일 뿐이기 때문입니다.
.hbs
, .ejs
및 React.(ts|js)x
와 같은 여러 엔진을 지원합니다.단점
용법
@react-ssr/express 사용
그것을 설치하십시오:
$ npm install --save @react-ssr/core @react-ssr/express express react react-dom
And add a script to your package.json like this:
…
빠른 시작
설치
$ npm install --save @react-ssr/express express react react-dom
package.json 채우기
{
"scripts": {
"start": "node server.js"
}
}
server.js 쓰기
const express = require('@react-ssr/express');
const app = express();
app.get('/', (req, res) => {
const user = { name: 'World' };
res.render('index', { user });
});
app.listen(3000, () => {
console.log('> Ready on http://localhost:3000');
});
views/index.jsx 구현
import React from 'react';
export default function Index(props) {
return `Hello ${props.user.name}!`;
}
서버 실행
$ npm start
당신은 볼 수 있습니다
Hello World!
깊이 파고들다
1. jsx 및 tsx 등록
출처: register.ts
const ENGINE: 'jsx' | 'tsx' = getEngine();
app.engine(ENGINE, renderFile);
app.set('views', resolve(process.cwd(), viewsDir));
app.set('view engine', ENGINE);
app.use(express.static(distDir));
2. 파일 렌더링(서버 측 렌더링)
출처: render.tsx
import { renderToString } from 'react-dom/server';
let html: string = '<!DOCTYPE html>';
let Page = require(file); // `file` is a React function component
Page = Page.default || Page;
html += renderToString(
<Html script={`${hash}.js`}>
<Page {...props} />
</Html>
);
return html;
3. 스크립트 번들 및 출력 쓰기
출처: render.tsx
import fs from 'fs';
import template from 'art-template';
import webpack from 'webpack';
const { ufs } = require('unionfs');
const MemoryFileSystem = require('memory-fs');
const template = require('art-template');
const cwd: string = process.cwd();
template.defaults.minimize = false;
const mfs = new MemoryFileSystem;
ufs.use(mfs).use(fs); // union memory-fs and fs!
// write file in the server memory
mfs.mkdirpSync(resolve(cwd, 'react-ssr-src'));
mfs.writeFileSync(resolve(cwd, `react-ssr-src/entry.jsx`), template(resolve(__dirname, '../page.jsx'), { props }));
mfs.writeFileSync(resolve(cwd, `react-ssr-src/page.jsx`), template(file, props));
// compile in the server memory!
const compiler: webpack.Compiler = webpack(configure(hash, ext, distDir));
compiler.inputFileSystem = ufs;
compiler.outputFileSystem = mfs;
compiler.run((err: any) => {
if (err) {
console.error(err.stack || err);
if (err.details) {
console.error(err.details);
}
return;
}
});
// read the results from memory file system
// write the results to the real file system
await outputFileSync('result.js', mfs.readFileSync(cache).toString());
그게 다야!
최종 출력 html은 다음과 같습니다.
<!DOCTYPE html>
<html>
<body>
<div id="app">
<p>Hello World!</p>
</div>
<script src="/c834ab9b47260a08d695f59ba1a5b24d.js"></script>
</body>
</html>
종결
그러나 나는 NEXT.js을 사용하는 것을 좋아합니다! ㅋㅋㅋ
Reference
이 문제에 관하여(Express용 React View 템플릿 엔진), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/saltyshiomix/the-react-view-template-engine-for-express-42f0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)