-
Notifications
You must be signed in to change notification settings - Fork 477
Expand file tree
/
Copy pathupdateTemplate.mjs
More file actions
138 lines (119 loc) · 4.13 KB
/
Copy pathupdateTemplate.mjs
File metadata and controls
138 lines (119 loc) · 4.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
import fs from 'fs-extra'
import path from 'node:path'
import { fileURLToPath } from 'node:url'
import Logger from './logger.mjs'
import pkg from '../packages/design-core/package.json' assert { type: 'json' }
const logger = new Logger('updateTemplate')
const __filename = fileURLToPath(import.meta.url)
const __dirname = path.dirname(__filename)
const templateSrcPath = path.resolve(__dirname, '../designer-demo')
const templateDistPath = path.resolve(__dirname, '../packages/engine-cli/template/designer')
const ignoreFolder = ['node_modules', 'dist', 'temp', 'tmp', 'vitest.config.js', 'tests', 'bundle-deps']
const filter = (src, _dest) => {
if (ignoreFolder.some((item) => src.includes(item))) {
return false
}
return true
}
async function copyTemplate() {
const templateBackupPath = path.resolve(templateDistPath, '../designer_backup')
if (await fs.pathExists(templateBackupPath)) {
await fs.remove(templateBackupPath)
}
// 先备份原目录
if (await fs.pathExists(templateDistPath)) {
await fs.move(templateDistPath, templateBackupPath)
}
try {
// 删除cli template内容
if (await fs.pathExists(templateDistPath)) {
await fs.remove(templateDistPath)
}
// 复制designer-demo
await fs.copy(templateSrcPath, templateDistPath, { filter })
await fs.remove(templateBackupPath)
} catch (error) {
logger.error(error)
// 复制错误时恢复
if (await fs.pathExists(templateBackupPath)) {
await fs.move(templateBackupPath, templateDistPath)
}
} finally {
if (await fs.pathExists(templateBackupPath)) {
await fs.remove(templateBackupPath)
}
}
}
function removePkgDependencies(pkg, { dependencies = [], devDependencies = [] } = {}) {
dependencies?.forEach((name) => delete pkg.dependencies[name])
devDependencies?.forEach((name) => delete pkg.devDependencies[name])
}
function removePkgScripts(pkg, scripts) {
if (!scripts || !scripts.length) {
return
}
scripts.forEach((name) => delete pkg.scripts[name])
}
async function removeFiles(files) {
if (!files || !files.length) {
return
}
for (const file of files) {
const filePath = path.resolve(templateDistPath, file)
if (await fs.pathExists(filePath)) {
await fs.remove(filePath)
}
}
}
async function removeVitest(pkg) {
removePkgDependencies(pkg, { devDependencies: ['vitest', 'vite-plugin-vitest']})
removePkgScripts(pkg, ['test', 'test:watch'])
await removeFiles(['vitest.config.js', 'tests'])
}
async function updatePkgJson() {
const { version } = pkg
const pkgJsonPath = path.resolve(templateDistPath, 'package.json')
if ((await fs.pathExists(pkgJsonPath)) === false) {
return
}
const pkgData = await fs.readJSON(pkgJsonPath)
pkgData.version = '0.0.0'
const defaultScripts = {
dev: "concurrently 'pnpm:serve:mock' 'pnpm:serve:frontend'",
'serve:frontend': 'cross-env vite',
'serve:mock': 'node node_modules/@opentiny/tiny-engine-mock/dist/app.js'
}
Object.entries(defaultScripts).forEach(([name, value]) => {
pkgData.scripts[name] = value
})
pkgData.devDependencies['concurrently'] = '^8.2.0'
const updateDependencyVersions = (deps) => {
Object.keys(deps)
.filter((name) => name.includes('@opentiny/tiny-engine'))
.forEach((name) => {
deps[name] = `^${version}`
})
}
updateDependencyVersions(pkgData.dependencies)
updateDependencyVersions(pkgData.devDependencies)
await removeVitest(pkgData)
await fs.writeJSON(pkgJsonPath, pkgData, { spaces: 2 })
}
async function modifyViteConfig() {
const viteConfigPath = path.resolve(templateDistPath, 'vite.config.js')
if (await fs.exists(viteConfigPath)) {
const fileContent = await fs.readFile(viteConfigPath, { encoding: 'utf-8' })
const aliasRegexp = /useSourceAlias: *true/
if (aliasRegexp.test(fileContent)) {
const newFileContent = fileContent.replace(aliasRegexp, 'useSourceAlias: false')
await fs.writeFile(viteConfigPath, newFileContent)
}
}
}
// 同步design-demo代码到CLI模板,避免模板未更新或版本号未修改
async function main() {
await copyTemplate()
await updatePkgJson()
await modifyViteConfig()
}
main()