mirror of
https://github.com/naiyQAQ/fanqie-assistant.git
synced 2026-10-21 01:54:48 +00:00
63 lines
2.4 KiB
TypeScript
63 lines
2.4 KiB
TypeScript
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'),
|
||
},
|
||
},
|
||
}),
|
||
],
|
||
});
|