chore: support code-inspector for vinext (#32788)
Some checks failed
autofix.ci / autofix (push) Has been cancelled
Build and Push API & Web / build (api, DIFY_API_IMAGE_NAME, linux/amd64, build-api-amd64) (push) Has been cancelled
Build and Push API & Web / build (api, DIFY_API_IMAGE_NAME, linux/arm64, build-api-arm64) (push) Has been cancelled
Build and Push API & Web / build (web, DIFY_WEB_IMAGE_NAME, linux/amd64, build-web-amd64) (push) Has been cancelled
Build and Push API & Web / build (web, DIFY_WEB_IMAGE_NAME, linux/arm64, build-web-arm64) (push) Has been cancelled
Build and Push API & Web / create-manifest (api, DIFY_API_IMAGE_NAME, merge-api-images) (push) Has been cancelled
Build and Push API & Web / create-manifest (web, DIFY_WEB_IMAGE_NAME, merge-web-images) (push) Has been cancelled
Main CI Pipeline / Check Changed Files (push) Has been cancelled
Main CI Pipeline / API Tests (push) Has been cancelled
Main CI Pipeline / Web Tests (push) Has been cancelled
Main CI Pipeline / Style Check (push) Has been cancelled
Main CI Pipeline / VDB Tests (push) Has been cancelled
Main CI Pipeline / DB Migration Test (push) Has been cancelled

This commit is contained in:
非法操作
2026-03-01 20:27:57 +08:00
committed by GitHub
parent ffe77fecdf
commit fa4b8910c8

View File

@@ -1,15 +1,78 @@
import type { Plugin } from 'vite'
import fs from 'node:fs'
import path from 'node:path'
import { fileURLToPath } from 'node:url'
import react from '@vitejs/plugin-react'
import { codeInspectorPlugin } from 'code-inspector-plugin'
import vinext from 'vinext'
import { defineConfig } from 'vite'
import tsconfigPaths from 'vite-tsconfig-paths'
const __dirname = path.dirname(fileURLToPath(import.meta.url))
const isCI = !!process.env.CI
const inspectorPort = 5678
const inspectorInjectTarget = path.resolve(__dirname, 'app/components/browser-initializer.tsx')
const inspectorRuntimeFile = path.resolve(
__dirname,
`node_modules/code-inspector-plugin/dist/append-code-${inspectorPort}.js`,
)
const getInspectorRuntimeSnippet = (): string => {
if (!fs.existsSync(inspectorRuntimeFile))
return ''
const raw = fs.readFileSync(inspectorRuntimeFile, 'utf-8')
// Remove the helper module default export from append file to avoid duplicate default exports.
return raw.replace(
/\s*export default function CodeInspectorEmptyElement\(\)\s*\{[\s\S]*$/,
'',
)
}
const normalizeInspectorModuleId = (id: string): string => {
const withoutQuery = id.split('?', 1)[0]
// Vite/vinext may pass absolute fs modules as "/@fs/<abs-path>".
if (withoutQuery.startsWith('/@fs/'))
return withoutQuery.slice('/@fs'.length)
return withoutQuery
}
const createCodeInspectorPlugin = (): Plugin => {
return codeInspectorPlugin({
bundler: 'vite',
port: inspectorPort,
injectTo: inspectorInjectTarget,
exclude: [/^(?!.*\.(?:js|ts|mjs|mts|jsx|tsx|vue|svelte|html)(?:$|\?)).*/],
}) as Plugin
}
const createForceInspectorClientInjectionPlugin = (): Plugin => {
const clientSnippet = getInspectorRuntimeSnippet()
return {
name: 'vinext-force-code-inspector-client',
apply: 'serve',
enforce: 'pre',
transform(code, id) {
if (!clientSnippet)
return null
const cleanId = normalizeInspectorModuleId(id)
if (cleanId !== inspectorInjectTarget)
return null
if (code.includes('code-inspector-component'))
return null
return `${clientSnippet}\n${code}`
},
}
}
export default defineConfig(({ mode }) => {
const isDev = mode === 'development'
return {
plugins: mode === 'test'
? [
@@ -26,6 +89,12 @@ export default defineConfig(({ mode }) => {
} as Plugin,
]
: [
...(isDev
? [
createCodeInspectorPlugin(),
createForceInspectorClientInjectionPlugin(),
]
: []),
vinext(),
],
resolve: {