提交 9ca60cc2 编写于 作者: fxy060608's avatar fxy060608

fix: compatible with vite@3

上级 24f27b35
import fs from 'fs'
import path from 'path'
import { Plugin, PluginOption } from 'vite'
import { Plugin } from 'vite'
import {
isInHBuilderX,
// initPreContext,
// normalizePath,
parseManifestJsonOnce,
......@@ -48,39 +45,6 @@ export function createConfig(
exclude: /\.js$/,
loader: 'ts',
},
worker: {
plugins: initFixedEsbuildInitTSConfck(process.env.UNI_INPUT_DIR),
},
plugins: initFixedEsbuildInitTSConfck(process.env.UNI_NODE_ENV),
}
}
}
/**
* 解决 HBuilderX 项目未包含 package.json 时,initTSConfck 可能导致查找过慢,或递归目录时权限不足报错
* 即:未包含 package.json 时,直接移除 initTSConfck 相关逻辑
* @param inputDir
* @returns
*/
function initFixedEsbuildInitTSConfck(inputDir: string): PluginOption[] {
if (!isInHBuilderX()) {
return []
}
if (fs.existsSync(path.resolve(inputDir, 'package.json'))) {
return []
}
const initTSConfckPlugins = ['vite:esbuild', 'vite:esbuild-transpile']
return [
{
name: 'fixed-esbuild-initTSConfck',
enforce: 'pre',
configResolved(config) {
initTSConfckPlugins.forEach((name) => {
const plugin = config.worker.plugins.find((p) => p.name === name)
if (plugin) {
delete plugin.configResolved
}
})
},
},
]
}
......@@ -22,6 +22,7 @@ import { uniCopyPlugin } from './plugins/copy'
import { uniMovePlugin } from './plugins/move'
import {
initExtraPlugins,
initFixedEsbuildInitTSConfck,
initPluginUniOptions,
rewriteCompilerSfcParse,
} from './utils'
......@@ -138,6 +139,8 @@ export default function uniPlugin(
})
plugins.push(...uniPlugins)
plugins.push(...initFixedEsbuildInitTSConfck(process.env.UNI_INPUT_DIR))
// 执行 build 命令时,vite 强制了 NODE_ENV
// https://github.com/vitejs/vite/blob/main/packages/vite/src/node/build.ts#L405
// const config = await resolveConfig(inlineConfig, 'build', 'production')
......
import fs, { PathLike } from 'fs'
import path from 'path'
import { EXTNAME_VUE, resolveBuiltIn } from '@dcloudio/uni-cli-shared'
import {
EXTNAME_VUE,
isInHBuilderX,
normalizePath,
resolveBuiltIn,
} from '@dcloudio/uni-cli-shared'
import { SFCParseOptions } from '@vue/compiler-sfc'
import { Plugin } from 'vite'
import { isString } from '@vue/shared'
/**
* TODO 临时重写,解决 @vitejs/plugin-vue 的 Bug
*/
......@@ -20,3 +28,45 @@ export function rewriteCompilerSfcParse() {
return parse(source, options)
}
}
/**
* 解决 HBuilderX 项目未包含 package.json 时,initTSConfck 可能导致查找过慢,或递归目录时权限不足报错
* 即:未包含 package.json 时,直接移除 initTSConfck 相关逻辑
* @param inputDir
* @returns
*/
export function initFixedEsbuildInitTSConfck(inputDir: string): Plugin[] {
if (!isInHBuilderX()) {
return []
}
if (fs.existsSync(path.resolve(inputDir, 'package.json'))) {
return []
}
// 'vite:esbuild', 'vite:esbuild-transpile' initTSConfck
const existsSync = fs.existsSync
// 根目录 lerna.json 路径
const lernaJsonPath = normalizePath(path.resolve(inputDir, 'lerna.json'))
return [
{
name: 'uni:fixed-HBuilderX-initTSConfck-before',
enforce: 'pre',
configResolved() {
// 在 HBuilderX 项目中,缺少 package.json 时, 确保 searchForWorkspaceRoot 使用项目根目录, 否则 initTSConfck 会查找很费时,且可能访问目录权限报错
// https://github.com/vitejs/vite/blob/43b7b78b1834a4c7128d8a5d987f66a4defcbd93/packages/vite/src/node/plugins/esbuild.ts#L407
fs.existsSync = (p: PathLike) => {
if (isString(p)) {
// 访问根目录 lerna.json 时,直接返回 true
// https://github.com/vitejs/vite/blob/43b7b78b1834a4c7128d8a5d987f66a4defcbd93/packages/vite/src/node/server/searchRoot.ts#L35
if (
p.endsWith('lerna.json') &&
lernaJsonPath === normalizePath(p)
) {
return true
}
}
return existsSync(p)
}
},
},
]
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册