create-lve 0.6.11 → 0.6.13

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-lve",
3
- "version": "0.6.11",
3
+ "version": "0.6.13",
4
4
  "bin": {
5
5
  "create-lve": "index.js"
6
6
  },
@@ -1,4 +1,4 @@
1
- import { Provider as JotaiProvider } from 'jotai'
1
+ import { createStore, Provider as JotaiProvider } from 'jotai'
2
2
  import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
3
3
  import { Toaster } from 'sonner'
4
4
 
@@ -11,9 +11,12 @@ const queryClient = new QueryClient({
11
11
  },
12
12
  })
13
13
 
14
+ /** Jotai store — 在 React 外创建,生命周期不绑定组件树 */
15
+ export const jotaiStore = createStore()
16
+
14
17
  export function Providers({ children }: { children: React.ReactNode }) {
15
18
  return (
16
- <JotaiProvider>
19
+ <JotaiProvider store={jotaiStore}>
17
20
  <QueryClientProvider client={queryClient}>
18
21
  {children}
19
22
  <Toaster position="bottom-right" richColors visibleToasts={1} />
@@ -10,6 +10,21 @@ export interface FeatureRoute extends Omit<RouteObject, 'children' | 'handle'> {
10
10
  handle?: Record<string, unknown>
11
11
  }
12
12
 
13
+ /** 快捷创建 lazy 路由,减少重复模板代码 */
14
+ export function lazyRoute(
15
+ path: string,
16
+ factory: () => Promise<{ default: ComponentType }>,
17
+ index?: boolean,
18
+ ): FeatureRoute {
19
+ return {
20
+ ...(index ? { index: true } : { path }),
21
+ lazy: async () => {
22
+ const { default: Component } = await factory()
23
+ return { Component }
24
+ },
25
+ }
26
+ }
27
+
13
28
  /** FeatureRoute → RouteObject 递归转换,去掉 hostRootLayout */
14
29
  export function toRouteObjects(
15
30
  routes: FeatureRoute[],
@@ -1,14 +1,5 @@
1
- import type { FeatureRoute } from '@/app/types'
1
+ import { lazyRoute } from '@/app/types'
2
2
 
3
- const routes: FeatureRoute[] = [
4
- {
5
- path: '/',
6
- index: true,
7
- lazy: async () => {
8
- const { default: Component } = await import('./pages')
9
- return { Component }
10
- },
11
- },
12
- ]
3
+ const routes = [lazyRoute('/', () => import('./pages'), true)]
13
4
 
14
5
  export default routes
@@ -1,13 +1,5 @@
1
- import type { FeatureRoute } from '@/app/types'
1
+ import { lazyRoute } from '@/app/types'
2
2
 
3
- const routes: FeatureRoute[] = [
4
- {
5
- path: '*',
6
- lazy: async () => {
7
- const { default: Component } = await import('./pages')
8
- return { Component }
9
- },
10
- },
11
- ]
3
+ const routes = [lazyRoute('*', () => import('./pages'))]
12
4
 
13
5
  export default routes
@@ -1,35 +1,13 @@
1
- import type { FeatureRoute } from '@/app/types'
1
+ import { lazyRoute } from '@/app/types'
2
2
 
3
- const routes: FeatureRoute[] = [
3
+ const routes = [
4
4
  {
5
- path: '/settings',
5
+ ...lazyRoute('/settings', () => import('./pages/settings')),
6
6
  hostRootLayout: false,
7
- lazy: async () => {
8
- const { default: Component } = await import('./pages/settings')
9
- return { Component }
10
- },
11
7
  children: [
12
- {
13
- index: true,
14
- lazy: async () => {
15
- const { default: Component } = await import('./pages/overview')
16
- return { Component }
17
- },
18
- },
19
- {
20
- path: 'profile',
21
- lazy: async () => {
22
- const { default: Component } = await import('./pages/profile')
23
- return { Component }
24
- },
25
- },
26
- {
27
- path: 'account',
28
- lazy: async () => {
29
- const { default: Component } = await import('./pages/account')
30
- return { Component }
31
- },
32
- },
8
+ lazyRoute('/', () => import('./pages/overview'), true),
9
+ lazyRoute('profile', () => import('./pages/profile')),
10
+ lazyRoute('account', () => import('./pages/account')),
33
11
  ],
34
12
  },
35
13
  ]
@@ -32,17 +32,17 @@ export default defineConfig({
32
32
  build: {
33
33
  rolldownOptions: {
34
34
  output: {
35
- manualChunks(id) {
36
- if (!id.includes('node_modules')) return
37
- if (id.includes('react-dom')) return 'vendor-react-dom'
38
- if (id.includes('react') && !id.includes('react-router') && !id.includes('react-dom'))
39
- return 'vendor-react'
40
- if (id.includes('react-router')) return 'vendor-router'
41
- if (id.includes('@tanstack')) return 'vendor-query'
42
- if (id.includes('radix-ui')) return 'vendor-radix'
43
- if (id.includes('zustand')) return 'vendor-state'
44
- if (id.includes('jotai')) return 'vendor-atom'
45
- return 'vendor'
35
+ codeSplitting: {
36
+ groups: [
37
+ { name: 'vendor-react-dom', test: /node_modules.*react-dom/ },
38
+ { name: 'vendor-react', test: /node_modules.*react(?!-dom|-router)/ },
39
+ { name: 'vendor-router', test: /node_modules.*react-router/ },
40
+ { name: 'vendor-query', test: /node_modules.*@tanstack/ },
41
+ { name: 'vendor-radix', test: /node_modules.*radix-ui/ },
42
+ { name: 'vendor-state', test: /node_modules.*zustand/ },
43
+ { name: 'vendor-atom', test: /node_modules.*jotai/ },
44
+ { name: 'vendor', test: /node_modules/, minSize: 100 * 1024 },
45
+ ],
46
46
  },
47
47
  },
48
48
  },
@@ -21,13 +21,14 @@ export default defineConfig({
21
21
  build: {
22
22
  rolldownOptions: {
23
23
  output: {
24
- manualChunks(id) {
25
- if (!id.includes('node_modules')) return
26
- if (id.includes('vue') && !id.includes('vue-router')) return 'vendor-vue'
27
- if (id.includes('vue-router')) return 'vendor-router'
28
- if (id.includes('pinia')) return 'vendor-pinia'
29
- if (id.includes('@vueuse')) return 'vendor-vueuse'
30
- return 'vendor'
24
+ codeSplitting: {
25
+ groups: [
26
+ { name: 'vendor-vue', test: /node_modules.*vue(?!-router)/ },
27
+ { name: 'vendor-router', test: /node_modules.*vue-router/ },
28
+ { name: 'vendor-pinia', test: /node_modules.*pinia/ },
29
+ { name: 'vendor-vueuse', test: /node_modules.*@vueuse/ },
30
+ { name: 'vendor', test: /node_modules/, minSize: 100 * 1024 },
31
+ ],
31
32
  },
32
33
  },
33
34
  },