ssr-plugin-react 6.2.84 → 6.2.85
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +3 -3
- package/CHANGELOG.md +19 -0
- package/cjs/config/base.d.ts +1 -1
- package/cjs/config/base.d.ts.map +1 -1
- package/cjs/config/base.js +9 -16
- package/cjs/config/base.js.map +1 -1
- package/cjs/config/client.d.ts +1 -1
- package/cjs/config/client.d.ts.map +1 -1
- package/cjs/config/client.js +18 -21
- package/cjs/config/client.js.map +1 -1
- package/cjs/config/server.d.ts +1 -1
- package/cjs/config/server.d.ts.map +1 -1
- package/cjs/config/server.js +9 -12
- package/cjs/config/server.js.map +1 -1
- package/cjs/entry/client-entry.d.ts.map +1 -1
- package/cjs/entry/client-entry.js +2 -1
- package/cjs/entry/client-entry.js.map +1 -1
- package/cjs/entry/context.d.ts.map +1 -1
- package/cjs/entry/context.js.map +1 -1
- package/cjs/entry/create.d.ts.map +1 -1
- package/cjs/entry/create.js +4 -4
- package/cjs/entry/create.js.map +1 -1
- package/cjs/entry/server-entry.d.ts.map +1 -1
- package/cjs/entry/server-entry.js +29 -13
- package/cjs/entry/server-entry.js.map +1 -1
- package/cjs/index.js.map +1 -1
- package/cjs/tools/vite.d.ts.map +1 -1
- package/cjs/tools/vite.js +11 -20
- package/cjs/tools/vite.js.map +1 -1
- package/cjs/tools/webpack.js.map +1 -1
- package/esm/config/base.d.ts +1 -1
- package/esm/config/base.d.ts.map +1 -1
- package/esm/config/base.js +10 -17
- package/esm/config/base.js.map +1 -1
- package/esm/config/client.d.ts +1 -1
- package/esm/config/client.d.ts.map +1 -1
- package/esm/config/client.js +19 -22
- package/esm/config/client.js.map +1 -1
- package/esm/config/server.d.ts +1 -1
- package/esm/config/server.d.ts.map +1 -1
- package/esm/config/server.js +9 -12
- package/esm/config/server.js.map +1 -1
- package/esm/entry/client-entry.d.ts.map +1 -1
- package/esm/entry/client-entry.js +2 -1
- package/esm/entry/client-entry.js.map +1 -1
- package/esm/entry/context.d.ts.map +1 -1
- package/esm/entry/context.js.map +1 -1
- package/esm/entry/create.d.ts.map +1 -1
- package/esm/entry/create.js +4 -4
- package/esm/entry/create.js.map +1 -1
- package/esm/entry/server-entry.d.ts.map +1 -1
- package/esm/entry/server-entry.js +29 -13
- package/esm/entry/server-entry.js.map +1 -1
- package/esm/index.js.map +1 -1
- package/esm/tools/vite.d.ts.map +1 -1
- package/esm/tools/vite.js +12 -21
- package/esm/tools/vite.js.map +1 -1
- package/esm/tools/webpack.js.map +1 -1
- package/package.json +1 -1
- package/src/config/base.ts +47 -55
- package/src/config/client.ts +52 -55
- package/src/config/server.ts +31 -36
- package/src/entry/client-entry.tsx +54 -38
- package/src/entry/context.tsx +22 -19
- package/src/entry/create.ts +19 -19
- package/src/entry/server-entry.tsx +115 -82
- package/src/index.ts +41 -41
- package/src/tools/vite.ts +103 -122
- package/src/tools/webpack.ts +12 -12
|
@@ -12,96 +12,129 @@ import { Routes, ssrCreateContext, createStore } from './create'
|
|
|
12
12
|
const { FeRoutes, layoutFetch, state, Layout } = Routes
|
|
13
13
|
|
|
14
14
|
const serverRender = async (ctx: ISSRContext, config: IConfig) => {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
15
|
+
const context = ssrCreateContext()
|
|
16
|
+
const { mode, parallelFetch, prefix, isVite, isDev, clientPrefix, stream, rootId, hashRouter, streamHighWaterMark } = config
|
|
17
|
+
const rawPath = ctx.request.path ?? ctx.request.url
|
|
18
|
+
const path = normalizePath(rawPath, prefix)
|
|
19
|
+
const routeItem = findRoute<ReactESMPreloadFeRouteItem>(FeRoutes, path)
|
|
20
|
+
checkRoute({ routeItem, path })
|
|
21
|
+
const { fetch, webpackChunkName, component } = routeItem
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
const fn = async () => {
|
|
24
|
+
const dynamicCssOrder = await getAsyncCssChunk(ctx, webpackChunkName, config)
|
|
25
|
+
const dynamicJsOrder = await getAsyncJsChunk(ctx, webpackChunkName, config)
|
|
26
|
+
const manifest = await getManifest(config)
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
28
|
+
const injectCss = (
|
|
29
|
+
isVite && isDev
|
|
30
|
+
? [
|
|
31
|
+
<script src="/@vite/client" type="module" key="vite-client" />,
|
|
32
|
+
<script
|
|
33
|
+
key="vite-react-refresh"
|
|
34
|
+
type="module"
|
|
35
|
+
dangerouslySetInnerHTML={{
|
|
36
|
+
__html: reactRefreshFragment
|
|
37
|
+
}}
|
|
38
|
+
/>
|
|
39
|
+
]
|
|
40
|
+
: dynamicCssOrder
|
|
41
|
+
.map((css) => manifest[css])
|
|
42
|
+
.filter(Boolean)
|
|
43
|
+
.map((css) => <link rel="stylesheet" key={css} href={css} />)
|
|
44
|
+
).concat(
|
|
45
|
+
isVite && isDev
|
|
46
|
+
? []
|
|
47
|
+
: dynamicJsOrder
|
|
48
|
+
.map((js) => manifest[js])
|
|
49
|
+
.filter(Boolean)
|
|
50
|
+
.map((js) => <link href={js} as="script" rel={isVite ? 'modulepreload' : 'preload'} key={js} />)
|
|
51
|
+
)
|
|
37
52
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
53
|
+
const injectScript = [
|
|
54
|
+
...(isVite
|
|
55
|
+
? [
|
|
56
|
+
<script
|
|
57
|
+
key="viteWindowInit"
|
|
58
|
+
dangerouslySetInnerHTML={{
|
|
59
|
+
__html: 'window.__USE_VITE__=true'
|
|
60
|
+
}}
|
|
61
|
+
/>
|
|
62
|
+
]
|
|
63
|
+
: []),
|
|
64
|
+
...(isVite && isDev ? [<script type="module" src="/node_modules/ssr-plugin-react/esm/entry/client-entry.js" key="vite-react-entry" />] : []),
|
|
65
|
+
...dynamicJsOrder
|
|
66
|
+
.map((js) => manifest[js])
|
|
67
|
+
.filter(Boolean)
|
|
68
|
+
.map((item) => <script key={item} src={item} type={isVite ? 'module' : 'text/javascript'} />)
|
|
69
|
+
]
|
|
70
|
+
const staticList = {
|
|
71
|
+
injectCss,
|
|
72
|
+
injectScript
|
|
73
|
+
}
|
|
49
74
|
|
|
50
|
-
|
|
51
|
-
|
|
75
|
+
const isCsr = !!(mode === 'csr' || ctx.request.query?.csr)
|
|
76
|
+
const Component = isCsr ? React.Fragment : component.name === 'dynamicComponent' ? (await (component as DynamicFC)()).default : (component as StaticFC)
|
|
52
77
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
78
|
+
if (isCsr) {
|
|
79
|
+
logGreen(`Current path ${path} use csr render mode`)
|
|
80
|
+
}
|
|
56
81
|
|
|
57
|
-
|
|
82
|
+
let [layoutFetchData, fetchData] = [{}, {}]
|
|
58
83
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
84
|
+
if (!isCsr) {
|
|
85
|
+
const currentFetch = fetch ? (await fetch()).default : null
|
|
86
|
+
const lF = layoutFetch ? layoutFetch({ ctx }) : Promise.resolve({})
|
|
87
|
+
const CF = currentFetch ? currentFetch({ ctx }) : Promise.resolve({})
|
|
88
|
+
;[layoutFetchData, fetchData] = parallelFetch ? await Promise.all([lF, CF]) : [await lF, await CF]
|
|
89
|
+
}
|
|
65
90
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
91
|
+
const combineData = isCsr ? null : Object.assign({}, state ?? {}, layoutFetchData ?? {}, fetchData ?? {})
|
|
92
|
+
const ssrDevInfo = { manifest: isDev ? manifest : '', rootId }
|
|
93
|
+
const innerHTML = splitPageInfo({
|
|
94
|
+
'window.__USE_SSR__': !isCsr,
|
|
95
|
+
'window.__INITIAL_DATA__': isCsr ? {} : serialize(combineData),
|
|
96
|
+
'window.__USE_VITE__': isVite,
|
|
97
|
+
'window.prefix': `"${prefix}"`,
|
|
98
|
+
'window.clientPrefix': `"${clientPrefix ?? ''}"`,
|
|
99
|
+
'window.ssrDevInfo': JSON.stringify(ssrDevInfo),
|
|
100
|
+
'window.hashRouter': Boolean(hashRouter),
|
|
101
|
+
'window.__VALTIO_DATA__': isCsr ? {} : serialize(useStore())
|
|
102
|
+
})
|
|
103
|
+
const injectState = <script dangerouslySetInnerHTML={{ __html: innerHTML }} />
|
|
104
|
+
// with jsx type error, use createElement here
|
|
105
|
+
const ele = createElement(
|
|
106
|
+
StaticRouter,
|
|
107
|
+
{
|
|
108
|
+
location: ctx.request.url,
|
|
109
|
+
basename: prefix === '/' ? undefined : prefix
|
|
110
|
+
},
|
|
111
|
+
createElement(AppContext, {
|
|
112
|
+
context: context as any,
|
|
113
|
+
initialState: combineData,
|
|
114
|
+
children: createElement(
|
|
115
|
+
Layout,
|
|
116
|
+
{
|
|
117
|
+
ctx: ctx,
|
|
118
|
+
config: config,
|
|
119
|
+
staticList: staticList,
|
|
120
|
+
injectState: injectState
|
|
121
|
+
},
|
|
122
|
+
createElement(Component, null)
|
|
123
|
+
)
|
|
124
|
+
})
|
|
125
|
+
)
|
|
126
|
+
// for ctx.body will loose asynclocalstorage context, consume stream in advance like vue2/3
|
|
127
|
+
return stream ? renderToNodeStream(ele).pipe(new PassThrough({ highWaterMark: streamHighWaterMark })) : renderToString(ele)
|
|
128
|
+
}
|
|
96
129
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
130
|
+
return await localStorageWrapper.run(
|
|
131
|
+
{
|
|
132
|
+
context: context as any,
|
|
133
|
+
ctx,
|
|
134
|
+
store: createStore()
|
|
135
|
+
},
|
|
136
|
+
fn
|
|
137
|
+
)
|
|
102
138
|
}
|
|
103
139
|
|
|
104
|
-
export {
|
|
105
|
-
serverRender,
|
|
106
|
-
Routes
|
|
107
|
-
}
|
|
140
|
+
export { serverRender, Routes }
|
package/src/index.ts
CHANGED
|
@@ -3,47 +3,47 @@ import { loadConfig } from 'ssr-common-utils'
|
|
|
3
3
|
const { isVite, optimize } = loadConfig()
|
|
4
4
|
const spinner = require('ora')('Building')
|
|
5
5
|
|
|
6
|
-
export function clientPlugin
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
6
|
+
export function clientPlugin() {
|
|
7
|
+
return {
|
|
8
|
+
name: 'plugin-react',
|
|
9
|
+
start: async () => {
|
|
10
|
+
if (isVite) {
|
|
11
|
+
const { viteStart } = await import('./tools/vite')
|
|
12
|
+
await viteStart()
|
|
13
|
+
} else {
|
|
14
|
+
if (optimize) {
|
|
15
|
+
spinner.start()
|
|
16
|
+
const { viteBuildClient } = await import('./tools/vite')
|
|
17
|
+
await viteBuildClient()
|
|
18
|
+
process.env.NODE_ENV = 'development'
|
|
19
|
+
spinner.stop()
|
|
20
|
+
const { webpackStart } = await import('./tools/webpack')
|
|
21
|
+
await webpackStart()
|
|
22
|
+
} else {
|
|
23
|
+
const { webpackStart } = await import('./tools/webpack')
|
|
24
|
+
await webpackStart()
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
build: async () => {
|
|
29
|
+
if (isVite) {
|
|
30
|
+
const { viteBuild } = await import('./tools/vite')
|
|
31
|
+
await viteBuild()
|
|
32
|
+
} else {
|
|
33
|
+
if (optimize) {
|
|
34
|
+
spinner.start()
|
|
35
|
+
const { viteBuildClient } = await import('./tools/vite')
|
|
36
|
+
await viteBuildClient()
|
|
37
|
+
spinner.stop()
|
|
38
|
+
const { webpackBuild } = await import('./tools/webpack')
|
|
39
|
+
await webpackBuild()
|
|
40
|
+
} else {
|
|
41
|
+
const { webpackBuild } = await import('./tools/webpack')
|
|
42
|
+
await webpackBuild()
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
export * from './tools/vite'
|
package/src/tools/vite.ts
CHANGED
|
@@ -1,153 +1,134 @@
|
|
|
1
1
|
import { resolve } from 'path'
|
|
2
|
-
import { build, UserConfig } from 'vite'
|
|
3
|
-
import {
|
|
4
|
-
loadConfig, chunkNamePlugin, rollupOutputOptions, manifestPlugin, commonConfig,
|
|
5
|
-
asyncOptimizeChunkPlugin, getOutputPublicPath, getPkgMajorVersion, getCwd
|
|
6
|
-
} from 'ssr-common-utils'
|
|
7
2
|
import react from '@vitejs/plugin-react'
|
|
8
3
|
import { visualizer } from 'rollup-plugin-visualizer'
|
|
9
|
-
import {
|
|
4
|
+
import { asyncOptimizeChunkPlugin, chunkNamePlugin, commonConfig, getCwd, getOutputPublicPath, getPkgMajorVersion, loadConfig, manifestPlugin, rollupOutputOptions } from 'ssr-common-utils'
|
|
5
|
+
import { AndDesignVueResolve, AntdResolve, ElementPlusResolve, NutuiResolve, VantResolve, createStyleImportPlugin } from 'ssr-vite-plugin-style-import'
|
|
6
|
+
import { UserConfig, build } from 'vite'
|
|
10
7
|
const { getOutput, reactServerEntry, reactClientEntry, viteConfig, supportOptinalChaining, isDev, define, babelOptions, optimize } = loadConfig()
|
|
11
8
|
const { clientOutPut, serverOutPut } = getOutput()
|
|
12
9
|
const isAntd5 = getPkgMajorVersion('antd') === 5
|
|
13
10
|
const extraInclude = ([] as string[]).concat(isAntd5 ? ['react-is'] : [])
|
|
14
11
|
|
|
15
12
|
const styleImportConfig = {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
AndDesignVueResolve(),
|
|
19
|
-
VantResolve(),
|
|
20
|
-
ElementPlusResolve(),
|
|
21
|
-
NutuiResolve(),
|
|
22
|
-
AntdResolve()
|
|
23
|
-
]
|
|
13
|
+
include: ['**/*.vue', '**/*.ts', '**/*.js', '**/*.tsx', '**/*.jsx', /chunkName/],
|
|
14
|
+
resolves: [AndDesignVueResolve(), VantResolve(), ElementPlusResolve(), NutuiResolve(), AntdResolve()]
|
|
24
15
|
}
|
|
25
16
|
const serverPlugins = [
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
]
|
|
38
|
-
}
|
|
39
|
-
}),
|
|
40
|
-
viteConfig?.()?.common?.extraPlugin,
|
|
41
|
-
viteConfig?.()?.server?.extraPlugin,
|
|
42
|
-
createStyleImportPlugin(styleImportConfig)
|
|
17
|
+
react({
|
|
18
|
+
...viteConfig?.()?.server?.defaultPluginOptions,
|
|
19
|
+
jsxRuntime: 'automatic',
|
|
20
|
+
babel: {
|
|
21
|
+
...babelOptions,
|
|
22
|
+
plugins: [...(babelOptions?.plugins ?? []), ...(!supportOptinalChaining ? ['@babel/plugin-proposal-optional-chaining', '@babel/plugin-proposal-nullish-coalescing-operator'] : [])]
|
|
23
|
+
}
|
|
24
|
+
}),
|
|
25
|
+
viteConfig?.()?.common?.extraPlugin,
|
|
26
|
+
viteConfig?.()?.server?.extraPlugin,
|
|
27
|
+
createStyleImportPlugin(styleImportConfig)
|
|
43
28
|
].filter(Boolean)
|
|
44
29
|
|
|
45
30
|
const serverConfig: UserConfig = {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
31
|
+
...commonConfig(),
|
|
32
|
+
...viteConfig?.().server?.otherConfig,
|
|
33
|
+
plugins: viteConfig?.()?.server?.processPlugin?.(serverPlugins) ?? serverPlugins,
|
|
34
|
+
esbuild: {
|
|
35
|
+
...viteConfig?.().server?.otherConfig?.esbuild,
|
|
36
|
+
keepNames: true,
|
|
37
|
+
logOverride: { 'this-is-undefined-in-esm': 'silent' }
|
|
38
|
+
},
|
|
39
|
+
optimizeDeps: {
|
|
40
|
+
...viteConfig?.().server?.otherConfig?.optimizeDeps,
|
|
41
|
+
include: extraInclude.concat(...(viteConfig?.().server?.otherConfig?.optimizeDeps?.include ?? [])),
|
|
42
|
+
esbuildOptions: {
|
|
43
|
+
...viteConfig?.().server?.otherConfig?.optimizeDeps?.esbuildOptions,
|
|
44
|
+
// @ts-expect-error
|
|
45
|
+
bundle: isDev
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
build: {
|
|
49
|
+
minify: !process.env.NOMINIFY,
|
|
50
|
+
...viteConfig?.().server?.otherConfig?.build,
|
|
51
|
+
ssr: reactServerEntry,
|
|
52
|
+
outDir: serverOutPut,
|
|
53
|
+
rollupOptions: {
|
|
54
|
+
...viteConfig?.().server?.otherConfig?.build?.rollupOptions,
|
|
55
|
+
input: isDev ? reactClientEntry : reactServerEntry, // setting prebundle list by client-entry in dev
|
|
56
|
+
output: {
|
|
57
|
+
entryFileNames: 'Page.server.js',
|
|
58
|
+
assetFileNames: rollupOutputOptions().assetFileNames
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
define: {
|
|
63
|
+
...viteConfig?.().server?.otherConfig?.define,
|
|
64
|
+
__isBrowser__: false,
|
|
65
|
+
...define?.base,
|
|
66
|
+
...define?.server
|
|
67
|
+
}
|
|
83
68
|
}
|
|
84
69
|
const clientPlugins = [
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
70
|
+
react({
|
|
71
|
+
...viteConfig?.()?.client?.defaultPluginOptions,
|
|
72
|
+
jsxRuntime: 'automatic',
|
|
73
|
+
...babelOptions
|
|
74
|
+
}),
|
|
75
|
+
viteConfig?.()?.common?.extraPlugin,
|
|
76
|
+
viteConfig?.()?.client?.extraPlugin,
|
|
77
|
+
createStyleImportPlugin(styleImportConfig)
|
|
93
78
|
].filter(Boolean)
|
|
94
79
|
const analyzePlugin = process.env.GENERATE_ANALYSIS ? visualizer({ filename: resolve(getCwd(), './build/stat.html'), open: true }) : null
|
|
95
80
|
|
|
96
81
|
const clientConfig: UserConfig = {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
82
|
+
...commonConfig(),
|
|
83
|
+
...viteConfig?.().client?.otherConfig,
|
|
84
|
+
base: isDev ? '/' : getOutputPublicPath(),
|
|
85
|
+
esbuild: {
|
|
86
|
+
...viteConfig?.().client?.otherConfig?.esbuild,
|
|
87
|
+
keepNames: true,
|
|
88
|
+
logOverride: { 'this-is-undefined-in-esm': 'silent' }
|
|
89
|
+
},
|
|
90
|
+
optimizeDeps: {
|
|
91
|
+
...viteConfig?.().client?.otherConfig?.optimizeDeps,
|
|
92
|
+
include: ['react-router', ...extraInclude].concat(...(viteConfig?.().client?.otherConfig?.optimizeDeps?.include ?? [])),
|
|
93
|
+
exclude: ['ssr-hoc-react'].concat(...(viteConfig?.().client?.otherConfig?.optimizeDeps?.exclude ?? []))
|
|
94
|
+
},
|
|
95
|
+
plugins: viteConfig?.()?.client?.processPlugin?.(clientPlugins) ?? clientPlugins,
|
|
96
|
+
build: {
|
|
97
|
+
minify: !process.env.NOMINIFY,
|
|
98
|
+
...viteConfig?.().client?.otherConfig?.build,
|
|
99
|
+
...(optimize ? { write: false } : {}),
|
|
100
|
+
ssrManifest: true,
|
|
101
|
+
outDir: clientOutPut,
|
|
102
|
+
rollupOptions: {
|
|
103
|
+
...viteConfig?.().client?.otherConfig?.build?.rollupOptions,
|
|
104
|
+
input: reactClientEntry,
|
|
105
|
+
output: rollupOutputOptions(),
|
|
106
|
+
plugins: [chunkNamePlugin(), asyncOptimizeChunkPlugin(), manifestPlugin(), analyzePlugin]
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
define: {
|
|
110
|
+
...viteConfig?.().client?.otherConfig?.define,
|
|
111
|
+
__isBrowser__: true,
|
|
112
|
+
...define?.base,
|
|
113
|
+
...define?.client
|
|
114
|
+
}
|
|
130
115
|
}
|
|
131
116
|
const viteStart = async () => {
|
|
132
|
-
|
|
117
|
+
//
|
|
133
118
|
}
|
|
134
119
|
const viteBuild = async () => {
|
|
135
|
-
|
|
136
|
-
|
|
120
|
+
await build({ ...clientConfig, mode: 'production' })
|
|
121
|
+
await build({ ...serverConfig, mode: process.env.VITEMODE ?? 'production' })
|
|
137
122
|
}
|
|
138
123
|
|
|
139
124
|
const viteBuildClient = async () => {
|
|
140
|
-
|
|
125
|
+
await build({
|
|
126
|
+
...clientConfig,
|
|
127
|
+
mode: process.env.VITEMODE ?? 'production'
|
|
128
|
+
}).catch((_) => {})
|
|
141
129
|
}
|
|
142
130
|
const viteBuildServer = async () => {
|
|
143
|
-
|
|
131
|
+
await build({ ...serverConfig, mode: process.env.VITEMODE ?? 'production' })
|
|
144
132
|
}
|
|
145
133
|
|
|
146
|
-
export {
|
|
147
|
-
viteBuild,
|
|
148
|
-
viteStart,
|
|
149
|
-
serverConfig,
|
|
150
|
-
clientConfig,
|
|
151
|
-
viteBuildClient,
|
|
152
|
-
viteBuildServer
|
|
153
|
-
}
|
|
134
|
+
export { viteBuild, viteStart, serverConfig, clientConfig, viteBuildClient, viteBuildServer }
|
package/src/tools/webpack.ts
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
import * as WebpackChain from 'webpack-chain'
|
|
2
2
|
|
|
3
3
|
export const webpackStart = async () => {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
const { startServerBuild } = await import('ssr-webpack/cjs/server')
|
|
5
|
+
const { getServerWebpack } = await import('../config/server')
|
|
6
|
+
const serverConfigChain = new WebpackChain()
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
const { startClientServer } = await import('ssr-webpack')
|
|
9
|
+
const { getClientWebpack } = await import('../config')
|
|
10
|
+
const clientConfigChain = new WebpackChain()
|
|
11
|
+
await Promise.all([startServerBuild(getServerWebpack(serverConfigChain)), startClientServer(getClientWebpack(clientConfigChain))])
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
export const webpackBuild = async () => {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
const { startServerBuild, startClientBuild } = await import('ssr-webpack')
|
|
16
|
+
const { getClientWebpack, getServerWebpack } = await import('../config')
|
|
17
|
+
const serverConfigChain = new WebpackChain()
|
|
18
|
+
const clientConfigChain = new WebpackChain()
|
|
19
|
+
await Promise.all([startServerBuild(getServerWebpack(serverConfigChain)), startClientBuild(getClientWebpack(clientConfigChain))])
|
|
20
20
|
}
|