dev-app/rollup.config.mjs
2024-12-07 00:47:43 +08:00

160 lines
4.1 KiB
JavaScript

// @ts-check
import resolve from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';
import { dts } from 'rollup-plugin-dts';
import json from '@rollup/plugin-json';
import path from 'path';
import esbuild from 'rollup-plugin-esbuild';
import alias from '@rollup/plugin-alias';
import replace from '@rollup/plugin-replace';
import fs from 'fs';
const pkgs = JSON.parse(fs.readFileSync(new URL('./package.json', import.meta.url), 'utf-8'));
const isDev = process.env.NODE_ENV === 'development';
/**
* @type {import('rollup').RollupOptions}
*/
const config = {
input: './src/index.ts',
output: {
dir: './dist',
entryFileNames: 'app.mjs',
chunkFileNames: '[name]-[hash].mjs',
format: 'esm',
},
plugins: [
alias({
// only esbuild needs to be configured
entries: [
{ find: '@', replacement: path.resolve('src') }, // 配置 @ 为 src 目录
{ find: 'http', replacement: 'node:http' },
{ find: 'https', replacement: 'node:https' },
{ find: 'fs', replacement: 'node:fs' },
{ find: 'path', replacement: 'node:path' },
{ find: 'crypto', replacement: 'node:crypto' },
{ find: 'zlib', replacement: 'node:zlib' },
{ find: 'stream', replacement: 'node:stream' },
{ find: 'net', replacement: 'node:net' },
{ find: 'tty', replacement: 'node:tty' },
{ find: 'tls', replacement: 'node:tls' },
{ find: 'buffer', replacement: 'node:buffer' },
{ find: 'timers', replacement: 'node:timers' },
// { find: 'string_decoder', replacement: 'node:string_decoder' },
{ find: 'dns', replacement: 'node:dns' },
{ find: 'domain', replacement: 'node:domain' },
{ find: 'os', replacement: 'node:os' },
{ find: 'events', replacement: 'node:events' },
{ find: 'url', replacement: 'node:url' },
{ find: 'assert', replacement: 'node:assert' },
{ find: 'util', replacement: 'node:util' },
],
}),
replace({
preventAssignment: true, // 避免直接赋值
DEV_SERVER: JSON.stringify(isDev), // 替换 DEV_SERVER
}),
resolve({
preferBuiltins: true, // 强制优先使用内置模块
}),
commonjs(),
esbuild({
target: 'node22', // 目标为 Node.js 14
minify: false, // 启用代码压缩
tsconfig: 'tsconfig.json',
}),
json(),
],
external: [
'sequelize', //
'pg',
'@kevisual/router',
'ioredis',
'socket.io',
'minio',
'pino',
'@msgpack/msgpack',
'esbuild',
],
};
const configs = [
{
input: './src/scripts/init-data.ts',
output: {
dir: './dist',
entryFileNames: 'init-data.mjs',
format: 'esm',
},
plugins: [
alias({
// only esbuild needs to be configured
entries: [
{ find: '@', replacement: path.resolve('src') }, // 配置 @ 为 src 目录
],
}),
resolve(),
commonjs(),
esbuild({
target: 'node22',
minify: false,
tsconfig: 'tsconfig.json',
}),
],
external: [
'sequelize', //
'pg',
'@kevisual/router',
'ioredis',
'socket.io',
'minio',
'pino',
'@msgpack/msgpack',
],
},
{
input: './src/scripts/init-data.ts',
output: {
file: './dist/init-data.d.ts',
},
plugins: [dts()],
},
{
input: './src/index.ts',
output: {
file: './dist/app.d.ts',
},
plugins: [dts()],
},
];
const external = [
{
input: './src/shared/external.ts',
output: {
file: './dist/external.mjs',
},
plugins: [
alias({
// only esbuild needs to be configured
entries: [
{ find: '@', replacement: path.resolve('src') }, // 配置 @ 为 src 目录
],
}),
resolve(),
commonjs(),
esbuild({
target: 'node22',
minify: false,
tsconfig: 'tsconfig.json',
}),
],
},
{
input: './src/shared/external.ts',
output: {
file: './dist/external.d.ts',
},
plugins: [dts()],
},
];
export default [...configs, config, ...external];