You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1 line
4.6 KiB
1 line
4.6 KiB
7 months ago
|
const fs = require('fs')
const { spawn } = require('child_process')
class InitializeItem {
static instance = null
constructor() {
if (InitializeItem.instance) {
return InitializeItem.instance
}
InitializeItem.instance = this
}
async promptUser(question) {
return new Promise((resolve, reject) => {
const readline = require('readline')
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
})
rl.question(question, (res) => {
resolve(res)
rl.close()
})
})
}
async shouldInstallDependencies() {
const isInstall = await this.promptUser(
'是否需要自动帮您安装依赖(y/n):'
)
if (isInstall.toLowerCase() === 'y') {
return true
} else if (isInstall.toLowerCase() === 'n') {
return false
} else {
return this.shouldInstallDependencies()
}
}
async installDependencies() {
return new Promise((resolve, reject) => {
console.log('开始安装相关依赖...')
const command = process.platform === 'win32' ? 'cmd.exe' : 'npm'
const args =
process.platform === 'win32'
? ['/c', 'npm', 'install']
: ['install']
const installProcess = spawn(command, args)
installProcess.stdout.on('data', (data) => {
console.log(data.toString())
})
installProcess.stderr.on('data', (data) => {
console.error(data.toString())
})
installProcess.on('close', (code) => {
if (code !== 0) {
reject(
new Error(
`运行安装依赖命令错误,请查看以下报错信息寻找解决方法: ${error.message}`
)
)
} else {
console.log('安装依赖成功!')
resolve()
}
})
})
}
async copyFile(sourceDir, targetDir) {
return new Promise((resolve, reject) => {
fs.copyFile(sourceDir, targetDir, (error) => {
if (error) {
reject(error)
throw new Error(`复制文件失败: ${error.message}`)
}
resolve()
})
})
}
async writeToFile(filePath, { sourceData, targetData }) {
return new Promise((resolve, reject) => {
fs.readFile(filePath, 'utf8', (err, data) => {
if (err) {
console.error('读取文件失败:', err)
return
}
const modifiedData = data.replace(sourceData, targetData)
fs.writeFile(filePath, modifiedData, 'utf8', (err) => {
if (err) {
console.error('写入文件错误:', err)
return
}
resolve()
})
})
})
}
async initialize(targetVersion) {
const currentVersion = process.versions.node
if (currentVersion < targetVersion) {
throw new Error(
`你的当前node版本为(${currentVersion}),需要安装目标版本为 ${targetVersion} 以上!!`
)
}
const shouldInstall = await this.shouldInstallDependencies()
if (shouldInstall) {
await this.installDependencies()
}
await this.copyFile('.env.development.example', '.env.development')
await this.copyFile('.env.production.example', '.env.production')
const domain = await this.promptUser('请输入您的服务器域名地址:')
await this.writeToFile('.env.development', {
sourceData: `VITE_APP_BASE_URL=''`,
|