Files
moeplayer/scripts/build.js
T
王阳 0956cfaec9 阶段1工程化改造:npm 管理依赖,构建脚本自动压缩与拷贝运行时库
- 新增 package.json/scripts/build.js,npm run build 一键完成压缩与依赖拷贝
- hls.js(1.6.16)/flv.js(1.6.2)/mpegts.js(1.8.0) 由 vendored 改为 npm 依赖
- 删除 Source File/(PSD 与 Flash 遗留 crossdomain.xml)
- 新增 AGENTS.md 项目说明与改造路线图
2026-07-21 10:03:58 +08:00

66 lines
2.3 KiB
JavaScript

/*
* 构建脚本
* 功能:
* 1. 使用 terser 将 ckplayer/js/ckplayer.js 压缩为 ckplayer.min.js
* 2. 从 node_modules 拷贝运行时依赖(hls.js/flv.js/mpegts.js)到 ckplayer/ 对应目录
* 播放器运行时会按需动态加载这些文件,目录结构需与 getPath() 的约定保持一致
* 用法:npm run build
*/
const fs = require('fs');
const path = require('path');
const terser = require('terser');
const root = path.resolve(__dirname, '..');
// 运行时依赖拷贝清单:[npm包名, 产物目录, 需要拷贝的文件]
const libs = [
['hls.js', 'hls.js', ['hls.min.js', 'hls.min.js.map', 'LICENSE']],
['flv.js', 'flv.js', ['flv.min.js', 'flv.min.js.map', 'LICENSE']],
['mpegts.js', 'mpegts.js', ['mpegts.js', 'mpegts.js.map', 'LICENSE']]
];
async function minifyCore() {
const src = path.join(root, 'ckplayer/js/ckplayer.js');
const dist = path.join(root, 'ckplayer/js/ckplayer.min.js');
const code = fs.readFileSync(src, 'utf8');
const result = await terser.minify(code, {
output: {
// 保留文件头部的版权注释
comments: /^!|软件名称|版权/
}
});
if (result.error) {
throw result.error;
}
fs.writeFileSync(dist, result.code, 'utf8');
console.log('压缩完成: ckplayer/js/ckplayer.min.js (' + result.code.length + ' bytes)');
}
function copyLibs() {
for (const [pkg, dir, files] of libs) {
const pkgRoot = path.dirname(require.resolve(pkg + '/package.json'));
const targetDir = path.join(root, 'ckplayer', dir);
// 清空旧的 vendored 文件,只保留构建拷贝的产物
fs.rmSync(targetDir, { recursive: true, force: true });
fs.mkdirSync(targetDir, { recursive: true });
for (const file of files) {
const from = path.join(pkgRoot, 'dist', file);
// LICENSE 在包根目录而非 dist 目录
const fromAlt = path.join(pkgRoot, file);
const src = fs.existsSync(from) ? from : fromAlt;
fs.copyFileSync(src, path.join(targetDir, file));
}
const version = require(pkg + '/package.json').version;
console.log('拷贝完成: ckplayer/' + dir + '/ (' + pkg + '@' + version + ')');
}
}
(async () => {
await minifyCore();
copyLibs();
console.log('构建完成');
})().catch(err => {
console.error('构建失败:', err);
process.exit(1);
});