通用模式兼容摩卡和飞书,添加通信工具组件,添加未开通会员面板

This commit is contained in:
2026-07-17 20:04:29 +08:00
parent bca1ca3182
commit bfe13d300b
17 changed files with 1997 additions and 456 deletions
+84
View File
@@ -0,0 +1,84 @@
/**
* 修正 Plasmo build 后 manifest.json 中 web_accessible_resources 引用不存在文件的问题
* 逻辑:遍历 manifest 中所有引用的资源文件名,如果在 build 目录中不存在,
* 则尝试用「同前缀 + 同后缀」的实际文件替换,找不到则移除该条目
*/
const fs = require("fs")
const path = require("path")
const buildDir = path.resolve(__dirname, "../build/chrome-mv3-prod")
const manifestPath = path.join(buildDir, "manifest.json")
if (!fs.existsSync(manifestPath)) {
console.error("[fix-manifest] manifest.json 不存在,跳过")
process.exit(0)
}
const manifest = JSON.parse(fs.readFileSync(manifestPath, "utf-8"))
// 递归获取 build 目录下所有文件的相对路径
function getAllFiles(dir, baseDir, result = []) {
const entries = fs.readdirSync(dir, { withFileTypes: true })
for (const entry of entries) {
const fullPath = path.join(dir, entry.name)
if (entry.isDirectory()) {
getAllFiles(fullPath, baseDir, result)
} else {
result.push(path.relative(baseDir, fullPath).replace(/\\/g, "/"))
}
}
return result
}
const actualFiles = getAllFiles(buildDir, buildDir)
if (!manifest.web_accessible_resources) {
console.log("[fix-manifest] 无 web_accessible_resources,无需修正")
process.exit(0)
}
let modified = false
manifest.web_accessible_resources.forEach((entry) => {
if (!entry.resources) return
const newResources = []
for (const resource of entry.resources) {
if (actualFiles.includes(resource)) {
// 文件存在,保留
newResources.push(resource)
} else {
// 文件不存在,尝试匹配:取文件名前缀(第一个.之前)和后缀(最后一个.之后)
const fileName = resource.split("/").pop()
const dirPart = resource.includes("/") ? resource.substring(0, resource.lastIndexOf("/") + 1) : ""
const parts = fileName.split(".")
const prefix = parts[0] // 如 sidebar
const ext = parts[parts.length - 1] // 如 css
// 在实际文件中找同前缀同后缀的(考虑目录层级)
const match = actualFiles.find((f) => {
const fName = f.split("/").pop()
const fParts = fName.split(".")
return fParts[0] === prefix && fParts[fParts.length - 1] === ext
})
if (match) {
// 检查是否已经在 content_scripts.css 或其他地方被引用了(避免重复)
console.log(`[fix-manifest] 替换: ${resource} -> ${match}`)
newResources.push(match)
modified = true
} else {
console.log(`[fix-manifest] 移除不存在的资源: ${resource}`)
modified = true
}
}
}
entry.resources = newResources
})
if (modified) {
fs.writeFileSync(manifestPath, JSON.stringify(manifest), "utf-8")
console.log("[fix-manifest] manifest.json 已修正完成")
} else {
console.log("[fix-manifest] 所有资源文件均存在,无需修正")
}