140 lines
3.7 KiB
TypeScript
140 lines
3.7 KiB
TypeScript
|
// import tamagui from '@tamagui/vite-plugin'
|
||
|
import react from '@vitejs/plugin-react-swc'
|
||
|
import { defineConfig } from 'vite'
|
||
|
|
||
|
// console.log('tamagui', tamagui)
|
||
|
// const { tamaguiPlugin, tamaguiExtractPlugin } = tamagui
|
||
|
|
||
|
// Tamagui exports incorrectly this plugin
|
||
|
function tamaguiPlugin(options): any {
|
||
|
const components = [
|
||
|
...new Set([...options.components, 'tamagui', '@tamagui/core'])
|
||
|
]
|
||
|
const noExternalSSR = new RegExp(
|
||
|
`${components.join('|')}|react-native|expo-linear-gradient`,
|
||
|
'ig'
|
||
|
)
|
||
|
|
||
|
const plugin: any = {
|
||
|
name: 'tamagui-base',
|
||
|
enforce: 'pre',
|
||
|
|
||
|
config(userConfig, env) {
|
||
|
return {
|
||
|
plugins: [
|
||
|
//
|
||
|
// envPlugin(['NODE_ENV', 'TAMAGUI_TARGET', 'ENABLE_RSC']),
|
||
|
// viteCommonjs(),
|
||
|
],
|
||
|
define: {
|
||
|
// reanimated support
|
||
|
'global.__x': {},
|
||
|
_frameTimestamp: undefined,
|
||
|
_WORKLET: false,
|
||
|
...(process.env.NODE_ENV !== 'test' && {
|
||
|
'process.env.TAMAGUI_TARGET': JSON.stringify(
|
||
|
process.env.TAMAGUI_TARGET || 'web'
|
||
|
),
|
||
|
'process.env.NODE_ENV': JSON.stringify(
|
||
|
process.env.NODE_ENV || env.mode
|
||
|
),
|
||
|
'process.env.ENABLE_RSC': JSON.stringify(
|
||
|
process.env.ENABLE_RSC || ''
|
||
|
),
|
||
|
'process.env.ENABLE_STEPS': JSON.stringify(
|
||
|
process.env.ENABLE_STEPS || ''
|
||
|
),
|
||
|
'process.env.IS_STATIC': JSON.stringify(false)
|
||
|
})
|
||
|
},
|
||
|
// build: {
|
||
|
// commonjsOptions: {
|
||
|
// transformMixedEsModules: true,
|
||
|
// },
|
||
|
// },
|
||
|
ssr: {
|
||
|
noExternal: noExternalSSR
|
||
|
},
|
||
|
optimizeDeps: {
|
||
|
// disabled: false,
|
||
|
include: ['styleq', 'react-native-reanimated'],
|
||
|
esbuildOptions: {
|
||
|
jsx: 'transform',
|
||
|
// plugins: [
|
||
|
// esbuildCommonjs([
|
||
|
// 'styleq',
|
||
|
// 'inline-style-prefixer',
|
||
|
// 'create-react-class',
|
||
|
// 'copy-to-clipboard',
|
||
|
// ]),
|
||
|
// ],
|
||
|
resolveExtensions: [
|
||
|
'.web.js',
|
||
|
'.web.ts',
|
||
|
'.web.tsx',
|
||
|
'.js',
|
||
|
'.jsx',
|
||
|
'.json',
|
||
|
'.ts',
|
||
|
'.tsx',
|
||
|
'.mjs'
|
||
|
],
|
||
|
loader: {
|
||
|
'.js': 'jsx'
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
resolve: {
|
||
|
// for once it extracts
|
||
|
// mainFields: ['module:jsx', 'module', 'jsnext:main', 'jsnext', 'main'],
|
||
|
extensions: [
|
||
|
'.web.js',
|
||
|
'.web.ts',
|
||
|
'.web.tsx',
|
||
|
'.js',
|
||
|
'.jsx',
|
||
|
'.json',
|
||
|
'.ts',
|
||
|
'.tsx',
|
||
|
'.mjs'
|
||
|
],
|
||
|
alias: {
|
||
|
'react-native/Libraries/Renderer/shims/ReactFabric':
|
||
|
'@tamagui/proxy-worm',
|
||
|
'react-native/Libraries/Utilities/codegenNativeComponent':
|
||
|
'@tamagui/proxy-worm',
|
||
|
'react-native-svg': '@tamagui/react-native-svg',
|
||
|
'react-native': 'react-native-web',
|
||
|
...(options.useReactNativeWebLite && {
|
||
|
'react-native': 'react-native-web-lite',
|
||
|
'react-native-web': 'react-native-web-lite'
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return plugin
|
||
|
}
|
||
|
|
||
|
// process.env.TAMAGUI_TARGET = 'web'
|
||
|
|
||
|
const tamaguiConfig = {
|
||
|
components: [],
|
||
|
config: './src/tamagui.config.ts'
|
||
|
// useReactNativeWebLite: true,
|
||
|
}
|
||
|
|
||
|
// https://vitejs.dev/config
|
||
|
export default defineConfig({
|
||
|
define: {
|
||
|
TAMAGUI_TARGET: JSON.stringify('web')
|
||
|
},
|
||
|
plugins: [
|
||
|
react(),
|
||
|
tamaguiPlugin(tamaguiConfig)
|
||
|
// tamaguiExtractPlugin(tamaguiConfig)
|
||
|
]
|
||
|
})
|