Files
fanqie-assistant/vite.config.ts
T
2026-09-07 23:57:12 +08:00

63 lines
2.4 KiB
TypeScript
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.
import { defineConfig } from 'vite';
import monkey from 'vite-plugin-monkey';
import vue from '@vitejs/plugin-vue';
import { version } from './package.json';
import { readFileSync } from 'node:fs';
const tocdn = (
exportVarName: string,
pathname: string,
): [string, (version: string, name: string) => string] => [
exportVarName,
(version, name) => `https://registry.npmmirror.com/${name}/${version}/files/${pathname}`,
];
const icon = readFileSync('./src/assets/fanqie.svg', 'utf-8');
const iconUrl = `data:image/svg+xml;base64,${Buffer.from(icon).toString('base64')}`;
export default defineConfig({
plugins: [
vue(),
monkey({
entry: 'src/main.ts',
userscript: {
name: '番茄小说助手',
namespace: 'https://github.com/naiyQAQ/fanqie-assistant',
license: "GPLv3",
version,
description: '番茄小说助手,去广告、去推广、解锁章节、优化体验。',
icon: iconUrl,
author: 'naiyQAQ',
'run-at': 'document-start',
match: ['*://*.fanqienovel.com/*'],
// GM_cookie 用于读 HttpOnly 的 sessionid(书评点赞需要登录态)。
// 注意:Tampermonkey 稳定版默认只返回非 HttpOnly 的 Cookie,
// 用户需在 设置→通用→配置模式→高级,再 设置→高级→安全→允许脚本访问 Cookie→All
grant: ['GM_addStyle', 'GM_getValue', 'GM_setValue', 'GM_deleteValue', 'GM_xmlhttpRequest', 'GM_cookie', 'unsafeWindow'],
connect: [
'fanqienovel.com', // 主站
'jxbhmy.com', // 红烛小说 API
'snssdk.com', // 字节通用 API(含番茄小说)
'byteimg.com', // 图床
'fqnovelpic.com', // 图床
'bytecdn.cn', // 图床
// 听书音频 CDN。页面 CSP 的 connect-src 不含这些域名,
// 走页面 fetch 会被 report-only 策略上报,所以改用 GM_xmlhttpRequest
'fqnovelvod.com', // 番茄小说 TTS
'novelfmvod.com', // 番茄畅听
'volcautovod.com', // 火山引擎回源
],
},
build: {
fileName: 'fanqie-assistant.user.js',
// vue / moment / jszip 走 CDN @require,不打进脚本体积
externalGlobals: {
vue: tocdn('Vue', 'dist/vue.global.prod.js'),
moment: tocdn('moment', 'min/moment.min.js'),
jszip: tocdn('JSZip', 'dist/jszip.min.js'),
},
},
}),
],
});