阶段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 项目说明与改造路线图
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
/*
|
||||
* 构建脚本
|
||||
* 功能:
|
||||
* 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);
|
||||
});
|
||||
Reference in New Issue
Block a user