Skip to content

Commit

Permalink
feat: support config.define
Browse files Browse the repository at this point in the history
  • Loading branch information
zhangyuang committed Jan 5, 2022
1 parent 281da0c commit c04f128
Show file tree
Hide file tree
Showing 9 changed files with 57 additions and 23 deletions.
16 changes: 13 additions & 3 deletions docs/web/markdown/api/config.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,18 @@ const stream = await render<Readable>(this.ctx, userConfig)
静态资源构建时默认的 `entry` 名, 默认为 `Page`。无特殊需求不需要修改 -->

## define

- 类型: `{define?: {
base?: Record<string, string>
client?: Record<string, string>
server?: Record<string, string>
}}`
- 默认: `{}`
- 生效场景: `Webpack/Vite`

添加通用 `definePlugin` 配置,在双端皆可生效。兼容 `Webpack/Vite` 场景

## extraJsOrder

- 类型: `string[]`
Expand Down Expand Up @@ -378,7 +390,7 @@ css: () => {

- 默认: `{ enable: false }`

- 生效场景: `Webpack`
- 生效场景: `Vue3 + Webpack`

是否启用 `vue-i18n` 国际化插件

Expand Down Expand Up @@ -539,13 +551,11 @@ export type viteConfig? = () => {
client?: {
// 只在客户端生效的配置
defaultPluginOptions?: any // 默认使用的 vite 前端框架插件的配置,vue3 场景为 @vitejs/plugin-vue, react场景为 @vitejs/plugin-react 查看对应文档获取类型 https://vitejs.dev/plugins/
define?: Record<string, any>
extraPlugin?: any[] // 需要使用的额外插件
}
server?: {
// 只在服务端生效的配置
defaultPluginOptions?: any
define?: Record<string, any>
extraPlugin?: any[]
}
}
Expand Down
6 changes: 4 additions & 2 deletions packages/plugin-react/src/config/base.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ const addBabelLoader = (chain: WebpackChain.Rule<WebpackChain.Module>, envOption
}
const getBaseConfig = (chain: WebpackChain, isServer: boolean) => {
const config = loadConfig()
const { moduleFileExtensions, useHash, isDev, chainBaseConfig, corejsOptions, babelExtraModule, alias } = config
const { moduleFileExtensions, useHash, isDev, chainBaseConfig, corejsOptions, babelExtraModule, alias, define } = config
const mode = process.env.NODE_ENV as Mode
const envOptions = {
modules: false,
Expand Down Expand Up @@ -132,7 +132,9 @@ const getBaseConfig = (chain: WebpackChain, isServer: boolean) => {
color: isServer ? '#f173ac' : '#45b97c'
}))
chain.plugin('ssrDefine').use(webpack.DefinePlugin, [{
__isBrowser__: !isServer
__isBrowser__: !isServer,
...(isServer ? define?.server : define?.client),
...define?.base
}])
chainBaseConfig(chain)
return config
Expand Down
10 changes: 7 additions & 3 deletions packages/plugin-react/src/tools/vite.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import styleImport, {
} from 'vite-plugin-style-import'

const build: typeof BuildType = require('vite').build
const { getOutput, reactServerEntry, reactClientEntry, viteConfig, supportOptinalChaining, isDev } = loadConfig()
const { getOutput, reactServerEntry, reactClientEntry, viteConfig, supportOptinalChaining, isDev, define } = loadConfig()

const { clientOutPut, serverOutPut } = getOutput()
const styleImportConfig = {
Expand Down Expand Up @@ -52,7 +52,9 @@ const serverConfig: UserConfig = {
},
define: {
__isBrowser__: false,
...viteConfig?.()?.server?.define
...viteConfig?.()?.server?.define,
...define?.server,
...define?.base
}
}

Expand Down Expand Up @@ -81,7 +83,9 @@ const clientConfig: UserConfig = {
},
define: {
__isBrowser__: true,
...viteConfig?.()?.client?.define
...viteConfig?.()?.client?.define,
...define?.client,
...define?.base
}
}
const viteStart = async () => {
Expand Down
6 changes: 4 additions & 2 deletions packages/plugin-vue/src/config/base.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ const addBabelLoader = (chain: WebpackChain.Rule<WebpackChain.Module>, envOption

const getBaseConfig = (chain: WebpackChain, isServer: boolean) => {
const config = loadConfig()
const { moduleFileExtensions, useHash, isDev, chainBaseConfig, corejsOptions, ssrVueLoaderOptions, csrVueLoaderOptions, babelExtraModule, alias } = config
const { moduleFileExtensions, useHash, isDev, chainBaseConfig, corejsOptions, ssrVueLoaderOptions, csrVueLoaderOptions, babelExtraModule, alias, define } = config

let vueLoaderOptions = {
babelParserPlugins: ['jsx', 'classProperties', 'decorators-legacy']
Expand Down Expand Up @@ -171,7 +171,9 @@ const getBaseConfig = (chain: WebpackChain, isServer: boolean) => {
}))

chain.plugin('ssrDefine').use(webpack.DefinePlugin, [{
__isBrowser__: !isServer
__isBrowser__: !isServer,
...(isServer ? define?.server : define?.client),
...define?.base
}])

chainBaseConfig(chain)
Expand Down
10 changes: 7 additions & 3 deletions packages/plugin-vue/src/tools/vite.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import type { build as BuildType, UserConfig } from 'vite'
import { loadConfig, chunkNamePlugin, rollupOutputOptions, manifestPlugin, commonConfig } from 'ssr-server-utils'
import { createVuePlugin } from 'vite-plugin-vue2'
const build: typeof BuildType = require('vite').build
const { getOutput, vueServerEntry, vueClientEntry } = loadConfig()
const { getOutput, vueServerEntry, vueClientEntry, define } = loadConfig()
const { clientOutPut, serverOutPut } = getOutput()

const serverConfig: UserConfig = {
Expand All @@ -20,7 +20,9 @@ const serverConfig: UserConfig = {
}
},
define: {
__isBrowser__: false
__isBrowser__: false,
...define?.server,
...define?.base
}
}

Expand All @@ -39,7 +41,9 @@ const clientConfig: UserConfig = {
}
},
define: {
__isBrowser__: true
__isBrowser__: true,
...define?.client,
...define?.base
}
}
const viteStart = async () => {
Expand Down
6 changes: 4 additions & 2 deletions packages/plugin-vue3/src/config/base.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ const addBabelLoader = (chain: WebpackChain.Rule<WebpackChain.Module>, envOption

const getBaseConfig = (chain: WebpackChain, isServer: boolean) => {
const config = loadConfig()
const { moduleFileExtensions, useHash, isDev, chainBaseConfig, locale, corejsOptions, ssrVueLoaderOptions, csrVueLoaderOptions, babelExtraModule, alias } = config
const { moduleFileExtensions, useHash, isDev, chainBaseConfig, locale, corejsOptions, ssrVueLoaderOptions, csrVueLoaderOptions, babelExtraModule, alias, define } = config

let vueLoaderOptions = {
babelParserPlugins: ['jsx', 'classProperties', 'decorators-legacy']
Expand Down Expand Up @@ -204,7 +204,9 @@ const getBaseConfig = (chain: WebpackChain, isServer: boolean) => {
chain.plugin('ssrDefine').use(webpack.DefinePlugin, [{
__isBrowser__: !isServer,
__VUE_OPTIONS_API__: true,
__VUE_PROD_DEVTOOLS__: false
__VUE_PROD_DEVTOOLS__: false,
...(isServer ? define?.server : define?.client),
...define?.base
}])

chainBaseConfig(chain)
Expand Down
10 changes: 7 additions & 3 deletions packages/plugin-vue3/src/tools/vite.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import styleImport, {
} from 'vite-plugin-style-import'

const build: typeof BuildType = require('vite').build
const { getOutput, vue3ServerEntry, vue3ClientEntry, viteConfig, supportOptinalChaining, isDev } = loadConfig()
const { getOutput, vue3ServerEntry, vue3ClientEntry, viteConfig, supportOptinalChaining, isDev, define } = loadConfig()
const { clientOutPut, serverOutPut } = getOutput()
const styleImportConfig = {
include: ['**/*.vue', '**/*.ts', '**/*.js', '**/*.tsx', '**/*.jsx', /chunkName/],
Expand Down Expand Up @@ -54,7 +54,9 @@ const serverConfig: UserConfig = {
},
define: {
__isBrowser__: false,
...viteConfig?.()?.server?.define
...viteConfig?.()?.server?.define,
...define?.server,
...define?.base
}
}

Expand All @@ -78,7 +80,9 @@ const clientConfig: UserConfig = {
},
define: {
__isBrowser__: true,
...viteConfig?.()?.client?.define
...viteConfig?.()?.client?.define,
...define?.client,
...define?.base
}
}
const viteStart = async () => {
Expand Down
11 changes: 6 additions & 5 deletions packages/server-utils/src/loadConfig.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,15 @@ const loadConfig = (): IConfig => {
const reactServerEntry = join(cwd, './node_modules/ssr-plugin-react/esm/entry/server-entry.js')
const reactClientEntry = join(cwd, './node_modules/ssr-plugin-react/esm/entry/client-entry.js')
const supportOptinalChaining = coerce(process.version).major >= '14'

const define = {}
const alias = Object.assign({
'@': getFeDir(),
'~': getCwd(),
_build: join(getCwd(), './build')
}, framework === 'ssr-plugin-react' ? {
react: loadModuleFromFramework('react') ?? join(cwd, './node_module/react'),
'react-router': loadModuleFromFramework('react-router') ?? join(cwd, './node_module/react-router'),
'react-router-dom': loadModuleFromFramework('react-router-dom') ?? join(cwd, './node_module/react-router-dom')
react: loadModuleFromFramework('react'),
'react-router': loadModuleFromFramework('react-router'),
'react-router-dom': loadModuleFromFramework('react-router-dom')
} : {
vue$: framework === 'ssr-plugin-vue' ? 'vue/dist/vue.runtime.esm.js' : 'vue/dist/vue.runtime.esm-bundler.js'
}, userConfig.alias)
Expand Down Expand Up @@ -180,7 +180,8 @@ const loadConfig = (): IConfig => {
reactClientEntry,
isVite,
isCI,
supportOptinalChaining
supportOptinalChaining,
define
}, userConfig)
config.alias = alias
config.corejsOptions = corejsOptions
Expand Down
5 changes: 5 additions & 0 deletions packages/types/src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,11 @@ export interface IConfig {
extraPlugin?: any[]
}
}
define?: {
base?: Record<string, string>
client?: Record<string, string>
server?: Record<string, string>
}
}

export interface proxyOptions {
Expand Down

0 comments on commit c04f128

Please sign in to comment.