You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
2.2 KiB
78 lines
2.2 KiB
import typescript from '@rollup/plugin-typescript';
|
|
import terser from '@rollup/plugin-terser';
|
|
import { copyFileSync, existsSync, mkdirSync } from 'fs';
|
|
import { dirname, resolve } from 'path';
|
|
|
|
const ROOT = process.cwd();
|
|
const DIST_DIR = resolve(ROOT, 'dist');
|
|
const BACKEND_DIR = resolve(ROOT, '../src/main/resources/static/sdk');
|
|
|
|
const ASSETS = [
|
|
{ src: resolve(ROOT, 'assets/launcher-logo.png'), name: 'launcher-logo.png' },
|
|
{ src: resolve(ROOT, 'assets/marked.min.js'), name: 'marked.min.js' },
|
|
];
|
|
|
|
const BUNDLE_FILES = ['chatbot-sdk.js', 'chatbot-sdk.min.js'];
|
|
|
|
/** 将构建产物与静态资源复制到指定目录 */
|
|
function copyFiles(srcFiles, targetDir, label) {
|
|
if (!existsSync(targetDir)) mkdirSync(targetDir, { recursive: true });
|
|
for (const { src, name } of srcFiles) {
|
|
if (!existsSync(src)) {
|
|
console.warn(`[copy-assets] 未找到 ${src},跳过`);
|
|
continue;
|
|
}
|
|
copyFileSync(src, resolve(targetDir, name));
|
|
}
|
|
console.log(`[copy-assets] 已复制 ${label} 到 ${targetDir}`);
|
|
}
|
|
|
|
/** Rollup 插件:构建结束后同步产物与 logo 到后端静态资源目录 */
|
|
function copyAssets() {
|
|
return {
|
|
name: 'copy-assets',
|
|
closeBundle() {
|
|
// 1. 复制 logo 到 dist(便于独立分发)
|
|
copyFiles(
|
|
ASSETS.map(a => ({ src: a.src, name: a.name })),
|
|
DIST_DIR,
|
|
'logo 到 dist'
|
|
);
|
|
|
|
// 2. 复制 logo + JS 产物到后端 static/sdk/
|
|
const backendAssets = [
|
|
...ASSETS.map(a => ({ src: a.src, name: a.name })),
|
|
...BUNDLE_FILES.map(name => ({ src: resolve(DIST_DIR, name), name })),
|
|
];
|
|
copyFiles(backendAssets, BACKEND_DIR, 'SDK 产物与 logo 到后端 static/sdk');
|
|
},
|
|
};
|
|
}
|
|
|
|
export default {
|
|
input: 'src/index.ts',
|
|
output: [
|
|
{
|
|
file: 'dist/chatbot-sdk.js',
|
|
format: 'iife',
|
|
name: 'ChatbotSDK',
|
|
sourcemap: false,
|
|
},
|
|
{
|
|
file: 'dist/chatbot-sdk.min.js',
|
|
format: 'iife',
|
|
name: 'ChatbotSDK',
|
|
sourcemap: false,
|
|
plugins: [terser()],
|
|
},
|
|
],
|
|
plugins: [
|
|
typescript({
|
|
tsconfig: './tsconfig.json',
|
|
declaration: false,
|
|
declarationDir: undefined,
|
|
sourceMap: false,
|
|
}),
|
|
copyAssets(),
|
|
],
|
|
};
|