Skip to content

Commit 34d7705

Browse files
committed
workflow(dev): support dynamic peerDependencies
1 parent 54df94f commit 34d7705

File tree

1 file changed

+41
-31
lines changed

1 file changed

+41
-31
lines changed

scripts/dev.mts

Lines changed: 41 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -16,32 +16,38 @@ type VueVersion = '3' | '2.7' | '2.6'
1616

1717
const vueVersion: VueVersion[] = ['3', '2.7', '2.6']
1818

19-
const vueVersionToVitePlugin: Record<VueVersion, string> = {
19+
const toVitePlugin: Record<VueVersion, string> = {
2020
3: '@vitejs/plugin-vue',
2121
2.7: '@vitejs/plugin-vue2',
2222
2.6: 'vite-plugin-vue2',
2323
}
2424

25-
const vueVersionToDeps: Record<VueVersion, Record<string, string>> = {
25+
const toPackageOptions: Record<VueVersion, Record<string, Record<string, any>>> = {
2626
3: {
27-
'@vitejs/plugin-vue': 'latest',
28-
'@vue/compiler-sfc': 'latest',
29-
'@vue/test-utils': 'latest',
30-
'vue': 'latest',
27+
devDependencies: {
28+
'@vitejs/plugin-vue': 'latest',
29+
'@vue/compiler-sfc': 'latest',
30+
'@vue/test-utils': 'latest',
31+
'vue': 'latest',
32+
},
3133
},
3234
2.7: {
33-
'@vitejs/plugin-vue2': 'latest',
34-
'@vue/test-utils': 'legacy',
35-
'vue': '~2.7.14',
36-
'vue-template-compiler': '~2.7.14',
35+
devDependencies: {
36+
'@vitejs/plugin-vue2': 'latest',
37+
'@vue/test-utils': 'legacy',
38+
'vue': '~2.7.14',
39+
'vue-template-compiler': '~2.7.14',
40+
},
3741
},
3842
2.6: {
39-
'@vue/composition-api': 'latest',
40-
'@vue/test-utils': 'legacy',
41-
'vite-plugin-vue2': 'latest',
42-
'unplugin-vue2-script-setup': 'latest',
43-
'vue': '~2.6.14',
44-
'vue-template-compiler': '~2.6.14',
43+
devDependencies: {
44+
'@vue/composition-api': 'latest',
45+
'@vue/test-utils': 'legacy',
46+
'vite-plugin-vue2': 'latest',
47+
'unplugin-vue2-script-setup': 'latest',
48+
'vue': '~2.6.14',
49+
'vue-template-compiler': '~2.6.14',
50+
},
4551
},
4652
}
4753

@@ -69,8 +75,8 @@ async function dev() {
6975
// 删掉 vue 相关引入
7076
const existedVuePlugins: Record<string, boolean> = {}
7177
for (const k in mod.imports) {
72-
for (const vueVersion in vueVersionToVitePlugin) {
73-
if (mod.imports[k] && [vueVersionToVitePlugin[vueVersion as VueVersion], 'unplugin-vue2-script-setup/vite'].includes(mod.imports[k].from)) {
78+
for (const vueVersion in toVitePlugin) {
79+
if (mod.imports[k] && [toVitePlugin[vueVersion as VueVersion], 'unplugin-vue2-script-setup/vite'].includes(mod.imports[k].from)) {
7480
delete mod.imports[k]
7581
existedVuePlugins[k] = true
7682
}
@@ -92,7 +98,7 @@ async function dev() {
9298

9399
// 添加 vue 相关插件
94100
addVitePlugin(mod, {
95-
from: vueVersionToVitePlugin[targetVersion],
101+
from: toVitePlugin[targetVersion],
96102
imported: targetVersion === '2.6' ? 'createVuePlugin' : 'default',
97103
constructor: 'vue',
98104
})
@@ -111,24 +117,28 @@ async function dev() {
111117

112118
const pkg = JSON.parse(fs.readFileSync('./package.json', 'utf-8'))
113119

114-
for (const ver in vueVersionToDeps) {
120+
// 删除非目标版本的依赖
121+
for (const ver of vueVersion) {
115122
if (ver !== targetVersion) {
116-
for (const deps in vueVersionToDeps[ver as VueVersion]) {
117-
// 删除非目标版本的依赖
118-
// peerDependencies 中的依赖会被 pnpm 自动添加,不删除
119-
if (pkg.devDependencies[deps] && !vueVersionToDeps[targetVersion][deps] && !pkg.peerDependencies[deps]) {
120-
delete pkg.devDependencies[deps]
121-
isDepsChanged = true
123+
for (const option in toPackageOptions[ver]) {
124+
for (const dep in toPackageOptions[ver][option]) {
125+
if (pkg[option][dep] && !toPackageOptions[targetVersion][option][dep]) {
126+
delete pkg[option][dep]
127+
isDepsChanged = true
128+
}
122129
}
123130
}
124131
}
125132
}
126133

127-
for (const targetDeps in vueVersionToDeps[targetVersion]) {
128-
// 添加目标版本的依赖
129-
if (pkg.devDependencies[targetDeps] !== vueVersionToDeps[targetVersion][targetDeps]) {
130-
pkg.devDependencies[targetDeps] = vueVersionToDeps[targetVersion][targetDeps]
131-
isDepsChanged = true
134+
// 添加目标版本的依赖
135+
for (const option in toPackageOptions[targetVersion]) {
136+
for (const dep in toPackageOptions[targetVersion][option]) {
137+
const depVer = toPackageOptions[targetVersion][option][dep]
138+
if (pkg[option][dep] !== depVer) {
139+
pkg[option][dep] = depVer
140+
isDepsChanged = true
141+
}
132142
}
133143
}
134144

0 commit comments

Comments
 (0)