Files
eSIM-Tools/scripts/build-static.js
Abner d8b06136dc fix(sentry): 修复 Sentry SDK 加载问题,改用 CDN 方式
由于项目使用原生 ES 模块而非 webpack 打包,npm 导入方式无法工作。
改用 CDN 动态加载方案:

- 新增 src/js/sentry-loader.js:从 CDN 动态加载 Sentry SDK
- 重写 src/js/modules/sentry-init.js:使用 window.Sentry 而非 npm 导入
- 新增 scripts/inject-sentry-config.js:构建时注入环境变量配置
- 更新 build-static.js:集成 Sentry 配置注入步骤
- 更新 HTML 文件:添加 Sentry 配置脚本块和 CSP 策略

测试方法:部署后在控制台执行 testSentry() 或 window.testSentry()
2025-12-13 22:16:51 +08:00

84 lines
2.3 KiB
JavaScript
Executable File

#!/usr/bin/env node
const BuildLogger = require('./logger.js');
const fs = require('fs');
const path = require('path');
const projectRoot = path.join(__dirname, '..');
const distDir = path.join(projectRoot, 'dist');
const entries = [
'index.html',
'manifest.webmanifest',
'src'
];
async function removeDist() {
await fs.promises.rm(distDir, { recursive: true, force: true });
}
async function copyEntry(entry) {
const from = path.join(projectRoot, entry);
const to = path.join(distDir, entry);
if (!fs.existsSync(from)) {
console.warn(`⚠️ 跳过不存在的入口: ${entry}`);
return;
}
try {
const stats = await fs.promises.stat(from);
if (stats.isDirectory()) {
await copyDirectory(from, to);
} else {
await fs.promises.mkdir(path.dirname(to), { recursive: true });
await fs.promises.copyFile(from, to);
}
} catch (err) {
console.error(`❌ 复制失败 ${entry}:`, err.message);
throw err;
}
}
async function copyDirectory(source, destination) {
try {
await fs.promises.mkdir(destination, { recursive: true });
const entries = await fs.promises.readdir(source, { withFileTypes: true });
for (const entry of entries) {
const srcPath = path.join(source, entry.name);
const destPath = path.join(destination, entry.name);
try {
if (entry.isDirectory()) {
await copyDirectory(srcPath, destPath);
} else if (entry.isFile()) {
await fs.promises.copyFile(srcPath, destPath);
}
} catch (fileErr) {
console.warn(`⚠️ 跳过文件 ${entry.name}:`, fileErr.message);
// 继续处理其他文件
}
}
} catch (err) {
throw new Error(`复制目录失败 ${source}: ${err.message}`);
}
}
(async () => {
BuildLogger.log('🧹 清理 dist 目录...');
await removeDist();
await fs.promises.mkdir(distDir, { recursive: true });
for (const entry of entries) {
BuildLogger.log(`📦 复制 ${entry} -> dist/${entry}`);
await copyEntry(entry);
}
// 注入 Sentry 配置
BuildLogger.log('🔧 注入 Sentry 配置...');
require('./inject-sentry-config.js');
BuildLogger.success(' 静态资源构建完成,输出目录 dist/');
})().catch(err => {
console.error('构建静态资源失败:', err);
process.exitCode = 1;
});