test2
This commit is contained in:
64
deploy.js
64
deploy.js
@@ -4,9 +4,12 @@ const path = require('node:path');
|
|||||||
|
|
||||||
// --- 【配置区】 ---
|
// --- 【配置区】 ---
|
||||||
const CONFIG = {
|
const CONFIG = {
|
||||||
localProjectRoot: path.join(__dirname, '..'),
|
// 1. 开发源码所在的根目录
|
||||||
localReleasesDir: path.join(__dirname, '../releases'),
|
devProjectRoot: path.join(__dirname, './'),
|
||||||
deployRemote: true,
|
// 2. phpStudy 实际运行网站的目录 (目标位置)
|
||||||
|
phpStudyPath: 'D:/phpstudy_pro/WWW/alert',
|
||||||
|
|
||||||
|
deployRemote: false,
|
||||||
remote: {
|
remote: {
|
||||||
host: '1.2.3.4', // 服务器IP
|
host: '1.2.3.4', // 服务器IP
|
||||||
user: 'root', // 用户名
|
user: 'root', // 用户名
|
||||||
@@ -14,6 +17,11 @@ const CONFIG = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 预定义几个常用路径
|
||||||
|
const DEV_DIST = path.join(CONFIG.devProjectRoot, 'dist');
|
||||||
|
const PHPSTUDY_RELEASES = path.join(CONFIG.phpStudyPath, 'releases');
|
||||||
|
const PHPSTUDY_CURRENT = path.join(CONFIG.phpStudyPath, 'current');
|
||||||
|
|
||||||
// 颜色工具
|
// 颜色工具
|
||||||
const log = {
|
const log = {
|
||||||
info: (msg) => console.log(`\x1b[36m>>> ${msg}\x1b[0m`),
|
info: (msg) => console.log(`\x1b[36m>>> ${msg}\x1b[0m`),
|
||||||
@@ -66,11 +74,11 @@ async function start() {
|
|||||||
// 4. 清理并本地归档
|
// 4. 清理并本地归档
|
||||||
try {
|
try {
|
||||||
log.info('正在清理.map 文件并执行本地归档...');
|
log.info('正在清理.map 文件并执行本地归档...');
|
||||||
cleanSourceMaps(path.join(CONFIG.localProjectRoot, 'dist'));
|
cleanSourceMaps(DEV_DIST);
|
||||||
deployToLocal(version);
|
deployToLocal(version);
|
||||||
log.success('本地归档与软链接更新完成');
|
log.success('本地归档与软链接更新完成');
|
||||||
} catch (_e) {
|
} catch (_e) {
|
||||||
log.error(`本地归档失败: ${e.message}`);
|
log.error(`本地归档失败: ${_e.message}`);
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,7 +89,7 @@ async function start() {
|
|||||||
deployToRemote(version);
|
deployToRemote(version);
|
||||||
log.success('远程部署任务全部完成');
|
log.success('远程部署任务全部完成');
|
||||||
} catch (_e) {
|
} catch (_e) {
|
||||||
log.error(`远程部署失败!错误详情: ${e.message}`);
|
log.error(`远程部署失败!错误详情: ${_e.message}`);
|
||||||
log.error(
|
log.error(
|
||||||
'请检查:1.服务器IP/路径是否正确;2.是否配置了 SSH 免密登录;3.服务器磁盘空间是否充足。',
|
'请检查:1.服务器IP/路径是否正确;2.是否配置了 SSH 免密登录;3.服务器磁盘空间是否充足。',
|
||||||
);
|
);
|
||||||
@@ -95,28 +103,40 @@ async function start() {
|
|||||||
// --- 逻辑封装函数 ---
|
// --- 逻辑封装函数 ---
|
||||||
|
|
||||||
function deployToLocal(version) {
|
function deployToLocal(version) {
|
||||||
const distDir = path.join(CONFIG.localProjectRoot, 'dist');
|
const targetDir = path.join(PHPSTUDY_RELEASES, version);
|
||||||
const targetDir = path.join(CONFIG.localReleasesDir, version);
|
|
||||||
const currentLink = path.join(CONFIG.localProjectRoot, 'current');
|
|
||||||
|
|
||||||
if (!fs.existsSync(CONFIG.localReleasesDir))
|
// A. 确保 phpStudy 下的 releases 文件夹存在
|
||||||
fs.mkdirSync(CONFIG.localReleasesDir);
|
if (!fs.existsSync(PHPSTUDY_RELEASES)) {
|
||||||
if (fs.existsSync(targetDir))
|
fs.mkdirSync(PHPSTUDY_RELEASES, { recursive: true });
|
||||||
|
}
|
||||||
|
|
||||||
|
// B. 如果该版本已存在,先删除旧的
|
||||||
|
if (fs.existsSync(targetDir)) {
|
||||||
fs.rmSync(targetDir, { recursive: true, force: true });
|
fs.rmSync(targetDir, { recursive: true, force: true });
|
||||||
|
}
|
||||||
|
|
||||||
// 移动 dist 到 releases
|
// C. 【关键】将开发目录下的 dist 复制到 phpStudy 对应的版本目录
|
||||||
fs.renameSync(distDir, targetDir);
|
// fs.cpSync 需要 Node.js v16.7.0+
|
||||||
|
try {
|
||||||
|
fs.cpSync(DEV_DIST, targetDir, { recursive: true });
|
||||||
|
log.success(`已将产物复制到: ${targetDir}`);
|
||||||
|
} catch (_e) {
|
||||||
|
throw new Error(`复制产物到 phpStudy 目录失败: ${_e.message}`);
|
||||||
|
}
|
||||||
|
|
||||||
// 更新本地软链接 (Junction)
|
// D. 更新 phpStudy 目录下的软链接 (Junction)
|
||||||
if (fs.existsSync(currentLink)) {
|
if (fs.existsSync(PHPSTUDY_CURRENT)) {
|
||||||
try {
|
try {
|
||||||
fs.rmSync(currentLink, { recursive: true, force: true });
|
// Windows 下删除目录链接
|
||||||
|
fs.rmSync(PHPSTUDY_CURRENT, { recursive: true, force: true });
|
||||||
} catch (_e) {
|
} catch (_e) {
|
||||||
throw new Error(`无法删除旧的本地软链接: ${e.message}`);
|
throw new Error(`无法删除 phpStudy 旧的软链接: ${_e.message}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 在 phpStudy 目录下创建链接,指向刚复制过去的版本
|
||||||
const linkType = process.platform === 'win32' ? 'junction' : 'dir';
|
const linkType = process.platform === 'win32' ? 'junction' : 'dir';
|
||||||
fs.symlinkSync(targetDir, currentLink, linkType);
|
fs.symlinkSync(targetDir, PHPSTUDY_CURRENT, linkType);
|
||||||
}
|
}
|
||||||
|
|
||||||
function deployToRemote(version) {
|
function deployToRemote(version) {
|
||||||
@@ -131,7 +151,7 @@ function deployToRemote(version) {
|
|||||||
timeout: 10000,
|
timeout: 10000,
|
||||||
});
|
});
|
||||||
} catch (_e) {
|
} catch (_e) {
|
||||||
throw new Error(`无法连接服务器或创建目录: ${e.message}`);
|
throw new Error(`无法连接服务器或创建目录: ${_e.message}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
// B. 使用 scp 上传文件夹
|
// B. 使用 scp 上传文件夹
|
||||||
@@ -142,7 +162,7 @@ function deployToRemote(version) {
|
|||||||
{ timeout: 60000 },
|
{ timeout: 60000 },
|
||||||
);
|
);
|
||||||
} catch (_e) {
|
} catch (_e) {
|
||||||
throw new Error(`文件传输失败 (SCP): ${e.message}`);
|
throw new Error(`文件传输失败 (SCP): ${_e.message}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
// C. 更新远程软链接
|
// C. 更新远程软链接
|
||||||
@@ -150,7 +170,7 @@ function deployToRemote(version) {
|
|||||||
const sshCmd = `ln -snf ${remoteVersionDir} ${remoteCurrentLink}`;
|
const sshCmd = `ln -snf ${remoteVersionDir} ${remoteCurrentLink}`;
|
||||||
execSync(`ssh ${user}@${host} "${sshCmd}"`);
|
execSync(`ssh ${user}@${host} "${sshCmd}"`);
|
||||||
} catch (_e) {
|
} catch (_e) {
|
||||||
throw new Error(`远程软链接更新失败: ${e.message}`);
|
throw new Error(`远程软链接更新失败: ${_e.message}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ const Login: React.FC = () => {
|
|||||||
<Flex align="center" justify="center">
|
<Flex align="center" justify="center">
|
||||||
<LoginForm
|
<LoginForm
|
||||||
logo="/logo.svg"
|
logo="/logo.svg"
|
||||||
title="RiskGuard"
|
title="RiskGuardxxx"
|
||||||
subTitle={$t('pages.layouts.userLayout.title')}
|
subTitle={$t('pages.layouts.userLayout.title')}
|
||||||
initialValues={{
|
initialValues={{
|
||||||
autoLogin: true,
|
autoLogin: true,
|
||||||
|
|||||||
Reference in New Issue
Block a user