ssr-plugin-react 6.1.12 → 6.1.14-alpha.0

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/esm/index.js CHANGED
@@ -1,28 +1,29 @@
1
- import * as WebpackChain from 'webpack-chain';
1
+ import { loadConfig } from 'ssr-server-utils';
2
+ const { isVite } = loadConfig();
2
3
  export function reactPlugin() {
3
4
  return {
4
5
  name: 'plugin-react',
5
6
  start: async () => {
6
- // 本地开发的时候要做细致的依赖分离, Vite 场景不需要去加载 Webpack 构建客户端应用所需的模块
7
- const { startServerBuild } = await import('ssr-webpack/cjs/server');
8
- const { getServerWebpack } = await import('./config/server');
9
- const serverConfigChain = new WebpackChain();
10
- if (process.env.BUILD_TOOL === 'vite') {
11
- await startServerBuild(getServerWebpack(serverConfigChain));
7
+ if (isVite) {
8
+ const { viteStart } = await import('./tools/vite');
9
+ await viteStart();
12
10
  }
13
11
  else {
14
- const { startClientServer } = await import('ssr-webpack');
15
- const { getClientWebpack } = await import('./config');
16
- const clientConfigChain = new WebpackChain();
17
- await Promise.all([startServerBuild(getServerWebpack(serverConfigChain)), startClientServer(getClientWebpack(clientConfigChain))]);
12
+ const { webpackStart } = await import('./tools/webpack');
13
+ await webpackStart();
18
14
  }
19
15
  },
20
16
  build: async () => {
21
- const { startServerBuild, startClientBuild } = await import('ssr-webpack');
22
- const { getClientWebpack, getServerWebpack } = await import('./config');
23
- const serverConfigChain = new WebpackChain();
24
- const clientConfigChain = new WebpackChain();
25
- await Promise.all([startServerBuild(getServerWebpack(serverConfigChain)), startClientBuild(getClientWebpack(clientConfigChain))]);
17
+ if (isVite) {
18
+ const { viteBuild } = await import('./tools/vite');
19
+ await viteBuild();
20
+ }
21
+ else {
22
+ const { webpackBuild } = await import('./tools/webpack');
23
+ await webpackBuild();
24
+ }
26
25
  }
27
26
  };
28
27
  }
28
+ export * from './tools/vite';
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBRTdDLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxVQUFVLEVBQUUsQ0FBQTtBQUUvQixNQUFNLFVBQVUsV0FBVztJQUN6QixPQUFPO1FBQ0wsSUFBSSxFQUFFLGNBQWM7UUFDcEIsS0FBSyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ2hCLElBQUksTUFBTSxFQUFFO2dCQUNWLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQTtnQkFDbEQsTUFBTSxTQUFTLEVBQUUsQ0FBQTthQUNsQjtpQkFBTTtnQkFDTCxNQUFNLEVBQUUsWUFBWSxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtnQkFDeEQsTUFBTSxZQUFZLEVBQUUsQ0FBQTthQUNyQjtRQUNILENBQUM7UUFDRCxLQUFLLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDaEIsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFBO2dCQUNsRCxNQUFNLFNBQVMsRUFBRSxDQUFBO2FBQ2xCO2lCQUFNO2dCQUNMLE1BQU0sRUFBRSxZQUFZLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO2dCQUN4RCxNQUFNLFlBQVksRUFBRSxDQUFBO2FBQ3JCO1FBQ0gsQ0FBQztLQUNGLENBQUE7QUFDSCxDQUFDO0FBRUQsY0FBYyxjQUFjLENBQUEifQ==
@@ -0,0 +1,6 @@
1
+ import type { UserConfig } from 'vite';
2
+ declare const serverConfig: UserConfig;
3
+ declare const clientConfig: UserConfig;
4
+ declare const viteStart: () => Promise<void>;
5
+ declare const viteBuild: () => Promise<void>;
6
+ export { viteBuild, viteStart, serverConfig, clientConfig };
@@ -0,0 +1,50 @@
1
+ import { loadConfig, chunkNamePlugin, output, manifestPlugin, commonConfig } from 'ssr-server-utils';
2
+ import react from '@vitejs/plugin-react';
3
+ const build = require('vite').build;
4
+ const { getOutput, reactServerEntry, reactClientEntry } = loadConfig();
5
+ const { clientOutPut, serverOutPut } = getOutput();
6
+ const serverConfig = {
7
+ ...commonConfig(),
8
+ plugins: [
9
+ react()
10
+ ],
11
+ build: {
12
+ ssr: reactServerEntry,
13
+ outDir: serverOutPut,
14
+ rollupOptions: {
15
+ output: {
16
+ entryFileNames: 'Page.server.js'
17
+ }
18
+ }
19
+ },
20
+ define: {
21
+ __isBrowser__: false
22
+ }
23
+ };
24
+ const clientConfig = {
25
+ ...commonConfig(),
26
+ plugins: [
27
+ react()
28
+ ],
29
+ build: {
30
+ ssrManifest: true,
31
+ outDir: clientOutPut,
32
+ rollupOptions: {
33
+ input: reactClientEntry,
34
+ output: output,
35
+ plugins: [chunkNamePlugin(), manifestPlugin()]
36
+ }
37
+ },
38
+ define: {
39
+ __isBrowser__: true
40
+ }
41
+ };
42
+ const viteStart = async () => {
43
+ //
44
+ };
45
+ const viteBuild = async () => {
46
+ await build({ ...clientConfig, mode: 'production' });
47
+ await build({ ...serverConfig, mode: 'production' });
48
+ };
49
+ export { viteBuild, viteStart, serverConfig, clientConfig };
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90b29scy92aXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDcEcsT0FBTyxLQUFLLE1BQU0sc0JBQXNCLENBQUE7QUFDeEMsTUFBTSxLQUFLLEdBQXFCLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUE7QUFDckQsTUFBTSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLFVBQVUsRUFBRSxDQUFBO0FBQ3RFLE1BQU0sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEdBQUcsU0FBUyxFQUFFLENBQUE7QUFFbEQsTUFBTSxZQUFZLEdBQWU7SUFDL0IsR0FBRyxZQUFZLEVBQUU7SUFDakIsT0FBTyxFQUFFO1FBQ1AsS0FBSyxFQUFFO0tBQ1I7SUFDRCxLQUFLLEVBQUU7UUFDTCxHQUFHLEVBQUUsZ0JBQWdCO1FBQ3JCLE1BQU0sRUFBRSxZQUFZO1FBQ3BCLGFBQWEsRUFBRTtZQUNiLE1BQU0sRUFBRTtnQkFDTixjQUFjLEVBQUUsZ0JBQWdCO2FBQ2pDO1NBQ0Y7S0FDRjtJQUNELE1BQU0sRUFBRTtRQUNOLGFBQWEsRUFBRSxLQUFLO0tBQ3JCO0NBQ0YsQ0FBQTtBQUVELE1BQU0sWUFBWSxHQUFlO0lBQy9CLEdBQUcsWUFBWSxFQUFFO0lBQ2pCLE9BQU8sRUFBRTtRQUNQLEtBQUssRUFBRTtLQUNSO0lBQ0QsS0FBSyxFQUFFO1FBQ0wsV0FBVyxFQUFFLElBQUk7UUFDakIsTUFBTSxFQUFFLFlBQVk7UUFDcEIsYUFBYSxFQUFFO1lBQ2IsS0FBSyxFQUFFLGdCQUFnQjtZQUN2QixNQUFNLEVBQUUsTUFBTTtZQUNkLE9BQU8sRUFBRSxDQUFDLGVBQWUsRUFBRSxFQUFFLGNBQWMsRUFBRSxDQUFDO1NBQy9DO0tBQ0Y7SUFDRCxNQUFNLEVBQUU7UUFDTixhQUFhLEVBQUUsSUFBSTtLQUNwQjtDQUNGLENBQUE7QUFDRCxNQUFNLFNBQVMsR0FBRyxLQUFLLElBQUksRUFBRTtJQUMzQixFQUFFO0FBQ0osQ0FBQyxDQUFBO0FBQ0QsTUFBTSxTQUFTLEdBQUcsS0FBSyxJQUFJLEVBQUU7SUFDM0IsTUFBTSxLQUFLLENBQUMsRUFBRSxHQUFHLFlBQVksRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQTtJQUNwRCxNQUFNLEtBQUssQ0FBQyxFQUFFLEdBQUcsWUFBWSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFBO0FBQ3RELENBQUMsQ0FBQTtBQUVELE9BQU8sRUFDTCxTQUFTLEVBQ1QsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ2IsQ0FBQSJ9
@@ -0,0 +1,2 @@
1
+ export declare const webpackStart: () => Promise<void>;
2
+ export declare const webpackBuild: () => Promise<void>;
@@ -0,0 +1,18 @@
1
+ import * as WebpackChain from 'webpack-chain';
2
+ export const webpackStart = async () => {
3
+ const { startServerBuild } = await import('ssr-webpack/cjs/server');
4
+ const { getServerWebpack } = await import('../config/server');
5
+ const serverConfigChain = new WebpackChain();
6
+ const { startClientServer } = await import('ssr-webpack');
7
+ const { getClientWebpack } = await import('../config');
8
+ const clientConfigChain = new WebpackChain();
9
+ await Promise.all([startServerBuild(getServerWebpack(serverConfigChain)), startClientServer(getClientWebpack(clientConfigChain))]);
10
+ };
11
+ export const webpackBuild = async () => {
12
+ const { startServerBuild, startClientBuild } = await import('ssr-webpack');
13
+ const { getClientWebpack, getServerWebpack } = await import('../config');
14
+ const serverConfigChain = new WebpackChain();
15
+ const clientConfigChain = new WebpackChain();
16
+ await Promise.all([startServerBuild(getServerWebpack(serverConfigChain)), startClientBuild(getClientWebpack(clientConfigChain))]);
17
+ };
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2VicGFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90b29scy93ZWJwYWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxZQUFZLE1BQU0sZUFBZSxDQUFBO0FBRTdDLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxLQUFLLElBQUksRUFBRTtJQUNyQyxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFBO0lBQ25FLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUE7SUFDN0QsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFBO0lBRTVDLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFBO0lBQ3pELE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQ3RELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQTtJQUM1QyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNwSSxDQUFDLENBQUE7QUFFRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsS0FBSyxJQUFJLEVBQUU7SUFDckMsTUFBTSxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUE7SUFDMUUsTUFBTSxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDeEUsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFBO0lBQzVDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQTtJQUM1QyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNuSSxDQUFDLENBQUEifQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ssr-plugin-react",
3
- "version": "6.1.12",
3
+ "version": "6.1.14-alpha.0",
4
4
  "description": "plugin-react for ssr",
5
5
  "main": "./cjs/index.js",
6
6
  "module": "./esm/index.js",
@@ -32,6 +32,7 @@
32
32
  "@babel/core": "^7.0.0",
33
33
  "@babel/plugin-transform-runtime": "^7.9.6",
34
34
  "@babel/preset-env": "^7.5.5",
35
+ "@vitejs/plugin-react": "^1.0.0",
35
36
  "babel-loader": "8.0.4",
36
37
  "babel-plugin-import": "^1.13.0",
37
38
  "babel-preset-react-app": "^9.0.2",
@@ -53,12 +54,13 @@
53
54
  "postcss-safe-parser": "4.0.1",
54
55
  "react-dev-utils": "^11.0.4",
55
56
  "serialize-javascript": "^3.0.0",
56
- "ssr-client-utils": "^5.6.42",
57
- "ssr-hoc-react": "^6.0.9",
58
- "ssr-server-utils": "^5.7.13",
59
- "ssr-webpack": "^5.7.12",
57
+ "ssr-client-utils": "^6.1.14-alpha.0",
58
+ "ssr-hoc-react": "^6.1.14-alpha.0",
59
+ "ssr-server-utils": "^6.1.14-alpha.0",
60
+ "ssr-webpack": "^6.1.14-alpha.0",
60
61
  "terser-webpack-plugin": "^2.3.5",
61
62
  "url-loader": "^4.1.1",
63
+ "vite": "^2.7.0-beta.10",
62
64
  "webpack-bundle-analyzer": "^3.6.1",
63
65
  "webpack-chain": "^6.4.0",
64
66
  "webpack-manifest-plugin": "^2.2.0",
@@ -68,9 +70,8 @@
68
70
  "@types/react": "^17.0.0",
69
71
  "@types/react-dom": "^17.0.0",
70
72
  "@types/react-router-dom": "^5.1.3",
71
- "@types/serialize-javascript": "^1.5.0",
72
73
  "@types/webpack": "^4.41.10",
73
- "ssr-types-react": "^6.0.8"
74
+ "ssr-types-react": "^6.1.14-alpha.0"
74
75
  },
75
- "gitHead": "0872b132285161bb838ef8597e3f91201d4b0ce5"
76
+ "gitHead": "aa2661c45ebd669fc11b84d90e2e8416e9373854"
76
77
  }
@@ -22,7 +22,6 @@ const getServerWebpack = (chain: WebpackChain) => {
22
22
 
23
23
  const modulesDir = [join(cwd, './node_modules')]
24
24
  modulesDir.push(getLocalNodeModules())
25
-
26
25
  chain.externals(nodeExternals({
27
26
  whitelist: [/\.(css|less|sass|scss)$/, /antd.*?(style)/].concat(whiteList || []),
28
27
  // externals Dir contains example/xxx/node_modules ssr/node_modules
@@ -1,17 +1,17 @@
1
1
  // @ts-nocheck
2
2
  // The file is provisional,don't depend on it
3
3
 
4
- import { createContext } from 'react'
4
+ import React from 'react'
5
5
  import { IContext } from 'ssr-types-react'
6
6
 
7
7
  let STORE_CONTEXT
8
8
  if (__isBrowser__) {
9
- STORE_CONTEXT = window.STORE_CONTEXT ?? createContext<IContext>({
9
+ STORE_CONTEXT = window.STORE_CONTEXT ?? React.createContext<IContext>({
10
10
  state: {}
11
11
  })
12
12
  window.STORE_CONTEXT = STORE_CONTEXT
13
13
  } else {
14
- STORE_CONTEXT = createContext<IContext>({
14
+ STORE_CONTEXT = React.createContext<IContext>({
15
15
  state: {}
16
16
  })
17
17
  }
@@ -1,8 +1,9 @@
1
1
  import * as React from 'react'
2
2
  import { StaticRouter } from 'react-router-dom'
3
3
  import { findRoute, getManifest, logGreen, normalizePath, addAsyncChunk } from 'ssr-server-utils'
4
- import { ISSRContext, IGlobal, IConfig, ReactRoutesType, ReactESMFeRouteItem } from 'ssr-types-react'
5
- import * as serialize from 'serialize-javascript'
4
+ import { ISSRContext, IConfig, ReactRoutesType, ReactESMFeRouteItem } from 'ssr-types-react'
5
+ //@ts-expect-error
6
+ import * as serializeWrap from 'serialize-javascript'
6
7
  // @ts-expect-error
7
8
  import * as Routes from '_build/ssr-temporary-routes'
8
9
  // @ts-expect-error
@@ -11,19 +12,16 @@ import { STORE_CONTEXT as Context } from '_build/create-context'
11
12
  import Layout from '@/components/layout/index.tsx'
12
13
 
13
14
  const { FeRoutes, layoutFetch, PrefixRouterBase, state } = Routes as ReactRoutesType
14
-
15
- declare const global: IGlobal
15
+ const serialize = serializeWrap.default || serializeWrap
16
16
 
17
17
  const serverRender = async (ctx: ISSRContext, config: IConfig): Promise<React.ReactElement> => {
18
- const { cssOrder, jsOrder, dynamic, mode, chunkName, parallelFetch, disableClientRender, prefix } = config
19
- global.window = global.window ?? {} // 防止覆盖上层应用自己定义的 window 对象
18
+ const { cssOrder, jsOrder, dynamic, mode, parallelFetch, disableClientRender, prefix, isVite, isDev } = config
20
19
  let path = ctx.request.path // 这里取 pathname 不能够包含 queryString
21
20
  const base = prefix ?? PrefixRouterBase // 以开发者实际传入的为最高优先级
22
21
  if (base) {
23
22
  path = normalizePath(path, base)
24
23
  }
25
24
  const routeItem = findRoute<ReactESMFeRouteItem>(FeRoutes, path)
26
- const viteMode = process.env.BUILD_TOOL === 'vite'
27
25
 
28
26
  if (!routeItem) {
29
27
  throw new Error(`
@@ -34,15 +32,17 @@ const serverRender = async (ctx: ISSRContext, config: IConfig): Promise<React.Re
34
32
 
35
33
  let dynamicCssOrder = cssOrder
36
34
 
37
- if (dynamic && !viteMode) {
35
+ if (dynamic) {
38
36
  dynamicCssOrder = cssOrder.concat([`${routeItem.webpackChunkName}.css`])
39
- dynamicCssOrder = await addAsyncChunk(dynamicCssOrder, routeItem.webpackChunkName)
37
+ if (!isVite) {
38
+ dynamicCssOrder = await addAsyncChunk(dynamicCssOrder, routeItem.webpackChunkName)
39
+ }
40
40
  }
41
- const manifest = viteMode ? {} : await getManifest()
41
+ const manifest = await getManifest(config)
42
42
 
43
43
  const injectCss: JSX.Element[] = []
44
44
 
45
- if (viteMode) {
45
+ if (isVite && isDev) {
46
46
  injectCss.push(<script src="/@vite/client" type="module" key="vite-client"/>)
47
47
  injectCss.push(<script key="vite-react-refresh" type="module" dangerouslySetInnerHTML={{
48
48
  __html: ` import RefreshRuntime from "/@react-refresh"
@@ -51,7 +51,6 @@ const serverRender = async (ctx: ISSRContext, config: IConfig): Promise<React.Re
51
51
  window.$RefreshSig$ = () => (type) => type
52
52
  window.__vite_plugin_react_preamble_installed__ = true`
53
53
  }} />)
54
- injectCss.push(<link rel='stylesheet' href={`/server/static/css/${chunkName}.css`} key="vite-head-css"/>)
55
54
  } else {
56
55
  dynamicCssOrder.forEach(css => {
57
56
  if (manifest[css]) {
@@ -67,14 +66,13 @@ const serverRender = async (ctx: ISSRContext, config: IConfig): Promise<React.Re
67
66
  }}/>)
68
67
  }
69
68
 
70
- const injectScript = viteMode ? [
71
- <script key="viteWindowInit" dangerouslySetInnerHTML={{
69
+ const injectScript = [
70
+ isVite && <script key="viteWindowInit" dangerouslySetInnerHTML={{
72
71
  __html: 'window.__USE_VITE__=true'
73
72
  }} />,
74
- <script type="module" src='/node_modules/ssr-plugin-react/esm/entry/client-entry.js' key="vite-react-entry" />
73
+ (isVite && isDev) && <script type="module" src='/node_modules/ssr-plugin-react/esm/entry/client-entry.js' key="vite-react-entry" />,
74
+ ...jsOrder.map(js => manifest[js]).map(item => item && <script key={item} src={item} type={isVite ? 'module' : ''}/>)
75
75
  ]
76
- : jsOrder.map(js => manifest[js]).map(item => <script key={item} src={item} />)
77
-
78
76
  const staticList = {
79
77
  injectCss,
80
78
  injectScript
package/src/index.ts CHANGED
@@ -1,28 +1,29 @@
1
- import * as WebpackChain from 'webpack-chain'
1
+ import { loadConfig } from 'ssr-server-utils'
2
+
3
+ const { isVite } = loadConfig()
2
4
 
3
5
  export function reactPlugin () {
4
6
  return {
5
7
  name: 'plugin-react',
6
8
  start: async () => {
7
- // 本地开发的时候要做细致的依赖分离, Vite 场景不需要去加载 Webpack 构建客户端应用所需的模块
8
- const { startServerBuild } = await import('ssr-webpack/cjs/server')
9
- const { getServerWebpack } = await import('./config/server')
10
- const serverConfigChain = new WebpackChain()
11
- if (process.env.BUILD_TOOL === 'vite') {
12
- await startServerBuild(getServerWebpack(serverConfigChain))
9
+ if (isVite) {
10
+ const { viteStart } = await import('./tools/vite')
11
+ await viteStart()
13
12
  } else {
14
- const { startClientServer } = await import('ssr-webpack')
15
- const { getClientWebpack } = await import('./config')
16
- const clientConfigChain = new WebpackChain()
17
- await Promise.all([startServerBuild(getServerWebpack(serverConfigChain)), startClientServer(getClientWebpack(clientConfigChain))])
13
+ const { webpackStart } = await import('./tools/webpack')
14
+ await webpackStart()
18
15
  }
19
16
  },
20
17
  build: async () => {
21
- const { startServerBuild, startClientBuild } = await import('ssr-webpack')
22
- const { getClientWebpack, getServerWebpack } = await import('./config')
23
- const serverConfigChain = new WebpackChain()
24
- const clientConfigChain = new WebpackChain()
25
- await Promise.all([startServerBuild(getServerWebpack(serverConfigChain)), startClientBuild(getClientWebpack(clientConfigChain))])
18
+ if (isVite) {
19
+ const { viteBuild } = await import('./tools/vite')
20
+ await viteBuild()
21
+ } else {
22
+ const { webpackBuild } = await import('./tools/webpack')
23
+ await webpackBuild()
24
+ }
26
25
  }
27
26
  }
28
27
  }
28
+
29
+ export * from './tools/vite'
@@ -0,0 +1,58 @@
1
+ import type { build as BuildType, UserConfig } from 'vite'
2
+ import { loadConfig, chunkNamePlugin, output, manifestPlugin, commonConfig } from 'ssr-server-utils'
3
+ import react from '@vitejs/plugin-react'
4
+ const build: typeof BuildType = require('vite').build
5
+ const { getOutput, reactServerEntry, reactClientEntry } = loadConfig()
6
+ const { clientOutPut, serverOutPut } = getOutput()
7
+
8
+ const serverConfig: UserConfig = {
9
+ ...commonConfig(),
10
+ plugins: [
11
+ react()
12
+ ],
13
+ build: {
14
+ ssr: reactServerEntry,
15
+ outDir: serverOutPut,
16
+ rollupOptions: {
17
+ output: {
18
+ entryFileNames: 'Page.server.js'
19
+ }
20
+ }
21
+ },
22
+ define: {
23
+ __isBrowser__: false
24
+ }
25
+ }
26
+
27
+ const clientConfig: UserConfig = {
28
+ ...commonConfig(),
29
+ plugins: [
30
+ react()
31
+ ],
32
+ build: {
33
+ ssrManifest: true,
34
+ outDir: clientOutPut,
35
+ rollupOptions: {
36
+ input: reactClientEntry,
37
+ output: output,
38
+ plugins: [chunkNamePlugin(), manifestPlugin()]
39
+ }
40
+ },
41
+ define: {
42
+ __isBrowser__: true
43
+ }
44
+ }
45
+ const viteStart = async () => {
46
+ //
47
+ }
48
+ const viteBuild = async () => {
49
+ await build({ ...clientConfig, mode: 'production' })
50
+ await build({ ...serverConfig, mode: 'production' })
51
+ }
52
+
53
+ export {
54
+ viteBuild,
55
+ viteStart,
56
+ serverConfig,
57
+ clientConfig
58
+ }
@@ -0,0 +1,20 @@
1
+ import * as WebpackChain from 'webpack-chain'
2
+
3
+ export const webpackStart = async () => {
4
+ const { startServerBuild } = await import('ssr-webpack/cjs/server')
5
+ const { getServerWebpack } = await import('../config/server')
6
+ const serverConfigChain = new WebpackChain()
7
+
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
+ }
13
+
14
+ export const webpackBuild = async () => {
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
+ }