支持分片弹幕接口 /api/v2/comment 请求时支持定义 segmentflag=true 参数,用于请求弹幕分片列表 /api/v2/segmentcomment 通过comment接口返回体中的Segment类JSON数据获取单独一个分片的弹幕数据 增加一键导出forward弹幕插件,使用命令 node build-forward-widget.js 修复youku弹幕里color是字符串导致返回的格式错误的问题
99 lines
3.3 KiB
JavaScript
99 lines
3.3 KiB
JavaScript
const esbuild = require('esbuild');
|
|
const fs = require('fs');
|
|
|
|
// 动态获取版本号
|
|
const { Globals } = require('./danmu_api/configs/globals.js');
|
|
|
|
// 定义要排除的UI相关模块
|
|
const uiModules = [
|
|
'./ui/template.js',
|
|
'../ui/template.js',
|
|
'../../ui/template.js',
|
|
'./ui/css/base.css.js',
|
|
'./ui/css/components.css.js',
|
|
'./ui/css/forms.css.js',
|
|
'./ui/css/responsive.css.js',
|
|
'./ui/js/main.js',
|
|
'./ui/js/preview.js',
|
|
'./ui/js/logview.js',
|
|
'./ui/js/apitest.js',
|
|
'./ui/js/pushdanmu.js',
|
|
'./ui/js/systemsettings.js',
|
|
'danmu_api/ui/template.js',
|
|
'danmu_api/ui/css/base.css.js',
|
|
'danmu_api/ui/css/components.css.js',
|
|
'danmu_api/ui/css/forms.css.js',
|
|
'danmu_api/ui/css/responsive.css.js',
|
|
'danmu_api/ui/js/main.js',
|
|
'danmu_api/ui/js/preview.js',
|
|
'danmu_api/ui/js/logview.js',
|
|
'danmu_api/ui/js/apitest.js',
|
|
'danmu_api/ui/js/pushdanmu.js',
|
|
'danmu_api/ui/js/systemsettings.js'
|
|
];
|
|
|
|
let customPolyfillContent = fs.readFileSync('forward/custom-polyfill.js', 'utf8');
|
|
|
|
(async () => {
|
|
try {
|
|
await esbuild.build({
|
|
entryPoints: ['forward/forward-widget.js'], // 新的入口文件
|
|
bundle: true,
|
|
minify: false, // 暂时关闭压缩以便调试
|
|
sourcemap: false,
|
|
platform: 'neutral', // 改为neutral以避免Node.js特定的全局变量
|
|
target: 'es2020',
|
|
outfile: 'dist/logvar-danmu.js',
|
|
format: 'esm', // 保持ES模块格式
|
|
plugins: [
|
|
// 插件:排除UI相关模块
|
|
{
|
|
name: 'exclude-ui-modules',
|
|
setup(build) {
|
|
// 拦截对UI相关模块的导入
|
|
build.onResolve({ filter: /.*ui.*\.(css|js)$|.*template\.js$/ }, (args) => {
|
|
if (uiModules.some(uiModule => args.path.includes(uiModule.replace('./', '').replace('../', '')))) {
|
|
return { path: args.path, external: true };
|
|
}
|
|
});
|
|
}
|
|
},
|
|
// 插件:移除导出语句(仅对输出文件进行处理)
|
|
{
|
|
name: 'remove-exports',
|
|
setup(build) {
|
|
build.onEnd(async (result) => {
|
|
if (result.errors.length === 0) {
|
|
let outputContent = fs.readFileSync('dist/logvar-danmu.js', 'utf8');
|
|
|
|
// // 更通用的模式,匹配包含这四个函数名的导出语句
|
|
const genericExportPattern = /export\s*{\s*(?:\s*(?:getCommentsById|getDanmuWithSegmentTime|getDetailById|searchDanmu)\s*,?\s*){4}\s*};?/g;
|
|
outputContent = outputContent.replace(genericExportPattern, '');
|
|
|
|
// 替换 httpGet 和 httpPost
|
|
outputContent = outputContent.replace(/await\s+httpGet/g, 'await Widget.http.get');
|
|
outputContent = outputContent.replace(/await\s+httpPost/g, 'await Widget.http.post');
|
|
|
|
// 保存修改后的内容
|
|
fs.writeFileSync('dist/logvar-danmu.js', outputContent);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
],
|
|
define: {
|
|
'widgetVersion': `"${Globals.VERSION}"`
|
|
},
|
|
banner: {
|
|
js: customPolyfillContent
|
|
},
|
|
logLevel: 'info'
|
|
});
|
|
|
|
console.log('Forward widget bundle created successfully!');
|
|
} catch (error) {
|
|
console.error('Build failed:', error);
|
|
process.exit(1);
|
|
}
|
|
})();
|