-
Notifications
You must be signed in to change notification settings - Fork 374
/
Copy pathupdateTemplate.mjs
107 lines (92 loc) · 3.22 KB
/
updateTemplate.mjs
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
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']
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)
}
}
}
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 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()