Skip to content
This repository was archived by the owner on May 8, 2025. It is now read-only.

Commit e75f3db

Browse files
committed
feat: 页面模版加上doctype html,完善ykcli
1 parent 6d407bc commit e75f3db

File tree

7 files changed

+36
-32
lines changed

7 files changed

+36
-32
lines changed

example/ssr-with-antd/app/controller/page.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ class PageController extends Controller {
1212
ctx.status = 200
1313
Object.assign(ctx.app.config, ssrConfig)
1414
const stream = await renderToStream(ctx, ctx.app.config)
15+
ctx.res.write('<!DOCTYPE html>')
1516
ctx.body = stream
1617
} catch (error) {
1718
ctx.logger.error(`Page Controller renderToStream Error ${error}`)

example/ssr-with-dva/app/controller/page.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ class PageController extends Controller {
1212
ctx.status = 200
1313
Object.assign(ctx.app.config, ssrConfig)
1414
const stream = await renderToStream(ctx, ctx.app.config)
15+
ctx.res.write('<!DOCTYPE html>')
1516
ctx.body = stream
1617
} catch (error) {
1718
ctx.logger.error(`Page Controller renderToStream Error ${error}`)

example/ssr-with-js/app/controller/page.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ class PageController extends Controller {
1212
ctx.status = 200
1313
Object.assign(ctx.app.config, ssrConfig)
1414
const stream = await renderToStream(ctx, ctx.app.config)
15+
ctx.res.write('<!DOCTYPE html>')
1516
ctx.body = stream
1617
} catch (error) {
1718
ctx.logger.error(`Page Controller renderToStream Error ${error}`)

example/ssr-with-loadable/app/controller/page.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ class PageController extends Controller {
1212
ctx.status = 200
1313
Object.assign(ctx.app.config, ssrConfig)
1414
const stream = await renderToStream(ctx, ctx.app.config)
15+
ctx.res.write('<!DOCTYPE html>')
1516
ctx.body = stream
1617
} catch (error) {
1718
ctx.logger.error(`Page Controller renderToStream Error ${error}`)

example/ssr-with-mobx/app/controller/page.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ class PageController extends Controller {
1212
ctx.status = 200
1313
Object.assign(ctx.app.config, ssrConfig)
1414
const stream = await renderToStream(ctx, ctx.app.config)
15+
ctx.res.write('<!DOCTYPE html>')
1516
ctx.body = stream
1617
} catch (error) {
1718
ctx.logger.error(`Page Controller renderToStream Error ${error}`)

packages/yk-cli/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "yk-cli",
3-
"version": "2.6.1",
3+
"version": "2.6.3",
44
"description": "ykcli for ssr",
55
"main": "./bin/index.js",
66
"types": "types/index.d.ts",
Lines changed: 30 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,52 @@
11

22
/* tslint:disable */
33

4-
import * as React from 'react';
5-
import { renderToString }from 'react-dom/server'
4+
import React from 'react'
5+
import { renderToString } from 'react-dom/server'
66
import path from 'path'
7-
import { webpackWithPromise } from './util'
87

9-
const fs = require('fs')
10-
const nodeExternals = require('webpack-node-externals');
11-
const cwd = process.env.BASE_DIR || process.cwd()
12-
const serverConfig = require(cwd + '/build/webpack.config.server')
13-
const isDev = process.env.NODE_ENV === 'development'
14-
let config: object
8+
let config:any
159

1610
try {
17-
fs.statSync(cwd + `/config/config.ssr.js`)
18-
config = require(cwd + `/config/config.ssr`)
11+
config = require('../../../config/config.ssr')
1912
} catch (error) {
20-
config = require(cwd + `/config/config.default`)
13+
config = require('../../../config/config.default')
2114
}
2215

23-
serverConfig.entry = {
24-
Layout: cwd + '/web/layout'
25-
}
16+
const isServerless = config.runtime === 'serverless'
17+
let serverConfig:any
2618

27-
serverConfig.output.path = path.resolve(__dirname, '../dist')
28-
serverConfig.externals = nodeExternals({
29-
whitelist: /\.(css|less|sass|scss)$/,
30-
modulesDir: path.resolve(__dirname, '../../') // 保证寻找第三方模块的node_modules是当前应用的node_modules
31-
})
19+
if (!process.env.FC_FUNC_CODE_PATH) {
20+
const nodeExternals = require('webpack-node-externals')
21+
serverConfig = require('../../../build/webpack.config.server')
22+
serverConfig.entry = {
23+
Layout: path.resolve(__dirname, '../../../web/layout')
24+
}
25+
serverConfig.output.path = path.resolve(__dirname, '../dist')
26+
serverConfig.externals = nodeExternals({
27+
whitelist: /\.(css|less|sass|scss)$/,
28+
modulesDir: path.resolve(__dirname, '../../') // 保证寻找第三方模块的node_modules是当前应用的node_modules
29+
})
30+
}
3231

33-
const reactToString = (Component: React.ComponentClass, props: object) => {
32+
const reactToStream = (Component: React.FunctionComponent, props: object) => {
3433
return renderToString(React.createElement(Component, props))
3534
}
3635

3736
const renderLayout = async () => {
3837
let Layout
39-
40-
if (isDev) {
41-
delete require.cache[path.resolve(__dirname, '../dist/Layout.server.js')]
42-
}
43-
4438
try {
45-
Layout = require('../dist/Layout.server').default
39+
// serverless 场景我们从事先构建好的应用目录下的dist文件夹中读取layout
40+
Layout = isServerless ? require('../../../dist/Layout.server').default : require('../dist/Layout.server').default
4641
} catch (error) {
42+
// 非serverless场景首次读取失败我们先调用webpack api构建一遍在ykcli的目录下再读取
43+
const { webpackWithPromise } = require('./util')
4744
await webpackWithPromise(serverConfig)
48-
Layout = require('../dist/Layout.server').default
45+
try {
46+
// 兼容serverless场景webpack静态分析打包错误
47+
Layout = require('../dist/Layout.server').default
48+
} catch (error) {
49+
}
4950
}
5051

5152
const props = {
@@ -56,10 +57,8 @@ const renderLayout = async () => {
5657
}
5758
}
5859

59-
const str = reactToString(Layout, props)
60+
const str = reactToStream(Layout, props)
6061
return str
6162
}
6263

6364
export default renderLayout
64-
65-

0 commit comments

Comments
 (0)