ai-agent-m/initialize.js
2025-03-07 10:31:57 +08:00

1 line
4.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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=''`,
targetData: `VITE_APP_BASE_URL='${domain}'`
})
await this.writeToFile('.env.production', {
sourceData: `VITE_APP_BASE_URL=''`,
targetData: `VITE_APP_BASE_URL='${domain}'`
})
require('./scripts/develop');
}
static getInstance() {
if (!InitializeItem.instance) {
InitializeItem.instance = new InitializeItem()
}
return InitializeItem.instance
}
}
;(async () => {
const initializeItem = InitializeItem.getInstance()
try {
await initializeItem.initialize('16.16.0')
} catch (error) {
console.error(error.message)
}
})()