-
Notifications
You must be signed in to change notification settings - Fork 4.9k
feat: h5中编译器为vite时支持配置vite下所有server options #18152
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
2397859
78cfb4e
6d6e843
3ac11a8
cdc0d73
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -14,6 +14,7 @@ import type { PostcssOption } from '@tarojs/taro/types/compile' | |||||||||||||||||||||||||||||||
| import type { ViteH5CompilerContext } from '@tarojs/taro/types/compile/viteCompilerContext' | ||||||||||||||||||||||||||||||||
| import type { PluginOption } from 'vite' | ||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||
| export default function (viteCompilerContext: ViteH5CompilerContext): PluginOption { | ||||||||||||||||||||||||||||||||
| const { taroConfig, cwd: appPath, app, sourceDir } = viteCompilerContext | ||||||||||||||||||||||||||||||||
| const routerMode = taroConfig.router?.mode || 'hash' | ||||||||||||||||||||||||||||||||
|
|
@@ -97,20 +98,77 @@ export default function (viteCompilerContext: ViteH5CompilerContext): PluginOpti | |||||||||||||||||||||||||||||||
| if (isObject<Record<string, any>>(serverOption.headers)) { | ||||||||||||||||||||||||||||||||
| headers = serverOption.headers | ||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||
| let hmr = true | ||||||||||||||||||||||||||||||||
| if (isBoolean(serverOption.hot)) { | ||||||||||||||||||||||||||||||||
| hmr = serverOption.hot | ||||||||||||||||||||||||||||||||
| if (isBoolean(serverOption.hmr)) { | ||||||||||||||||||||||||||||||||
| hmr = serverOption.hmr | ||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||
| let open: string | boolean = true | ||||||||||||||||||||||||||||||||
| if (isBoolean(serverOption.open) || isString(serverOption.open)) { | ||||||||||||||||||||||||||||||||
| open = serverOption.open | ||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||
| let cors: boolean | Record<string, any> = true | ||||||||||||||||||||||||||||||||
| if (isBoolean(serverOption.cors) || isObject<Record<string, any>>(serverOption.cors)) { | ||||||||||||||||||||||||||||||||
| cors = serverOption.cors | ||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||
| let watch: Record<string, any> = {} | ||||||||||||||||||||||||||||||||
| if (isObject<Record<string, any>>(serverOption.watch)) { | ||||||||||||||||||||||||||||||||
| watch = serverOption.watch | ||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||
|
Comment on lines
+119
to
+122
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion watch 配置需要更严格的类型检查 当前代码将 应用以下修改: - let watch: Record<string, any> = {}
- if (isObject<Record<string, any>>(serverOption.watch)) {
- watch = serverOption.watch
- }
+ let watch: Record<string, any> | boolean | undefined
+ if (isObject<Record<string, any>>(serverOption.watch) || isBoolean(serverOption.watch)) {
+ watch = serverOption.watch
+ }📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||
| let strictPort = false | ||||||||||||||||||||||||||||||||
| if (isBoolean(serverOption.strictPort)) { | ||||||||||||||||||||||||||||||||
| strictPort = serverOption.strictPort | ||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||
| let middlewareMode: 'ssr' | 'html' | false = false | ||||||||||||||||||||||||||||||||
| if (serverOption.middlewareMode === 'ssr' || serverOption.middlewareMode === 'html') { | ||||||||||||||||||||||||||||||||
| middlewareMode = serverOption.middlewareMode | ||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||
|
Comment on lines
+129
to
+132
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion middlewareMode 需支持 boolean=true,否则丢失中间件模式能力 Vite 支持 - let middlewareMode: 'ssr' | 'html' | false = false
- if (serverOption.middlewareMode === 'ssr' || serverOption.middlewareMode === 'html') {
- middlewareMode = serverOption.middlewareMode
- }
+ let middlewareMode: boolean | 'ssr' | 'html' | undefined
+ if (serverOption.middlewareMode === true || serverOption.middlewareMode === 'ssr' || serverOption.middlewareMode === 'html') {
+ middlewareMode = serverOption.middlewareMode
+ }📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||
| let origin = '' | ||||||||||||||||||||||||||||||||
| if (isString(serverOption.origin)) { | ||||||||||||||||||||||||||||||||
| origin = serverOption.origin | ||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||
|
Comment on lines
+134
to
+138
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion 避免将空字符串传入 origin:仅当为字符串时透传
- let origin = ''
- if (isString(serverOption.origin)) {
- origin = serverOption.origin
- }
+ let origin: string | undefined
+ if (isString(serverOption.origin)) {
+ origin = serverOption.origin
+ }(server 段保持 Also applies to: 275-276 🤖 Prompt for AI Agents |
||||||||||||||||||||||||||||||||
| let fsStrict = true | ||||||||||||||||||||||||||||||||
| if (serverOption.fs && isBoolean(serverOption.fs.strict)) { | ||||||||||||||||||||||||||||||||
| fsStrict = serverOption.fs.strict | ||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||
| let fsAllow: string[] = [] | ||||||||||||||||||||||||||||||||
| if (serverOption.fs && Array.isArray(serverOption.fs.allow)) { | ||||||||||||||||||||||||||||||||
| fsAllow = serverOption.fs.allow | ||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||
| let fsDeny: string[] = ['.env', '.env.*', '*.{crt,pem}', '**/.git/**'] | ||||||||||||||||||||||||||||||||
| if (serverOption.fs && Array.isArray(serverOption.fs.deny)) { | ||||||||||||||||||||||||||||||||
| fsDeny = serverOption.fs.deny | ||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||
| const mode = getMode(taroConfig) | ||||||||||||||||||||||||||||||||
| const mainFields = [...defaultMainFields] | ||||||||||||||||||||||||||||||||
| if (!isProd) { | ||||||||||||||||||||||||||||||||
| mainFields.unshift('main:h5') | ||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||
| let allowedHosts: true | string[] | undefined | ||||||||||||||||||||||||||||||||
| if (serverOption.allowedHosts === true || Array.isArray(serverOption.allowedHosts)) { | ||||||||||||||||||||||||||||||||
| allowedHosts = serverOption.allowedHosts | ||||||||||||||||||||||||||||||||
| } else if (isString(serverOption.allowedHosts) && serverOption.allowedHosts) { | ||||||||||||||||||||||||||||||||
| allowedHosts = [serverOption.allowedHosts] | ||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||
| let sourcemapIgnoreList: false | ((sourcePath: string, sourcemapPath: string) => boolean) = (sourcePath) => sourcePath.includes('node_modules') | ||||||||||||||||||||||||||||||||
| if (typeof serverOption.sourcemapIgnoreList === 'boolean' || typeof serverOption.sourcemapIgnoreList === 'function') { | ||||||||||||||||||||||||||||||||
| sourcemapIgnoreList = serverOption.sourcemapIgnoreList | ||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||
coderabbitai[bot] marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||
| return { | ||||||||||||||||||||||||||||||||
| name: 'taro:vite-h5-config', | ||||||||||||||||||||||||||||||||
| enforce: 'pre', | ||||||||||||||||||||||||||||||||
|
|
@@ -173,9 +231,21 @@ export default function (viteCompilerContext: ViteH5CompilerContext): PluginOpti | |||||||||||||||||||||||||||||||
| port: serverOption.port ? Number(serverOption.port) : 10086, | ||||||||||||||||||||||||||||||||
| https: typeof serverOption.https !== 'boolean' ? serverOption.https : undefined, | ||||||||||||||||||||||||||||||||
| open, | ||||||||||||||||||||||||||||||||
coderabbitai[bot] marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||||||||||||||
| proxy: (serverOption.proxy as any) || {}, | ||||||||||||||||||||||||||||||||
| proxy: serverOption.proxy || {} as Record<string, string | Record<string, any>>, | ||||||||||||||||||||||||||||||||
| headers, | ||||||||||||||||||||||||||||||||
| hmr, | ||||||||||||||||||||||||||||||||
| watch, | ||||||||||||||||||||||||||||||||
| fs: { | ||||||||||||||||||||||||||||||||
| strict: fsStrict, | ||||||||||||||||||||||||||||||||
| allow: fsAllow, | ||||||||||||||||||||||||||||||||
| deny: fsDeny, | ||||||||||||||||||||||||||||||||
| }, | ||||||||||||||||||||||||||||||||
| allowedHosts, | ||||||||||||||||||||||||||||||||
| middlewareMode, | ||||||||||||||||||||||||||||||||
| strictPort, | ||||||||||||||||||||||||||||||||
| sourcemapIgnoreList, | ||||||||||||||||||||||||||||||||
| origin, | ||||||||||||||||||||||||||||||||
| cors, | ||||||||||||||||||||||||||||||||
| }, | ||||||||||||||||||||||||||||||||
| css: { | ||||||||||||||||||||||||||||||||
| postcss: { | ||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
CORS 默认值不应强制为
true(存在安全风险)Vite 默认仅允许 localhost/127.0.0.1/::1,强行默认
true等于对任意来源开放,提升被同网段恶意页面读取源码的风险。建议:仅在类型匹配时透传,否则保持undefined交由 Vite 采用默认策略。(vite.dev)📝 Committable suggestion
🤖 Prompt for AI Agents