/* * 构建脚本 * 功能: * 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); });