Files
MetonaToast/rollup.config.js
T
tianhao 95f5652e9c fix: CJS 产物改 .cjs 扩展名并提升 default 导出 — 修复 require() 兼容性
- 包声明 type:module 时 .js 产物被 Node 按 ESM 解析:Node 16/18 下 require 报 ERR_REQUIRE_ESM,Node 20+ 拿到 namespace 对象(success/version 等属性 undefined)
- dist/metona-toast.cjs.js → .cjs,dist/react.cjs.js → .cjs
- 主包 CJS footer 将 default 提升为 module.exports:require() 直接返回 MeToast(兼容 .default / .MeToast / .Met / .Toast / .VERSION 所有用法)
- 版本 0.5.1(0.5.0 已发布带问题产物)
- 真实消费者验证:CJS/ESM/React 子包四路加载全部正常
2026-08-08 15:25:47 +08:00

139 lines
3.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import resolve from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';
import typescript from '@rollup/plugin-typescript';
import terser from '@rollup/plugin-terser';
import dts from 'rollup-plugin-dts';
import serve from 'rollup-plugin-serve';
import livereload from 'rollup-plugin-livereload';
const isDev = process.env.ROLLUP_WATCH;
const isProd = process.env.NODE_ENV === 'production';
// 基础插件
const basePlugins = [
resolve(),
commonjs(),
typescript({
tsconfig: './tsconfig.json',
declaration: false,
sourceMap: !isProd,
}),
];
// 开发服务器配置
const devPlugins = isDev ? [
serve({
open: true,
contentBase: ['site', 'dist'],
port: 3001,
}),
livereload({
watch: ['src', 'site'],
}),
] : [];
// 输出配置
export default [
// UMD(开发模式)
{
input: 'src/index.ts',
output: {
file: 'dist/metona-toast.js',
format: 'umd',
name: 'MeToast',
exports: 'named',
sourcemap: true,
},
plugins: [...basePlugins, ...devPlugins],
},
// 生产构建(非 dev 模式时输出全格式)
...(isDev ? [] : [
// ESM
{
input: 'src/index.ts',
output: {
file: 'dist/metona-toast.esm.js',
format: 'es',
exports: 'named',
sourcemap: true,
},
plugins: basePlugins,
},
// CommonJS.cjs 扩展名:包声明 type:module.js 会被 Node 按 ESM 解析)
// footer 将 default 提升为 module.exports,保证 require() 直接返回 MeToast
{
input: 'src/index.ts',
output: {
file: 'dist/metona-toast.cjs',
format: 'cjs',
exports: 'named',
sourcemap: true,
footer: 'module.exports = Object.assign(exports.default, exports);',
},
plugins: basePlugins,
},
// UMD 压缩版
{
input: 'src/index.ts',
output: {
file: 'dist/metona-toast.min.js',
format: 'umd',
name: 'MeToast',
exports: 'named',
sourcemap: false,
},
plugins: [
...basePlugins,
terser({
compress: {
drop_console: true,
drop_debugger: true,
pure_funcs: ['console.log', 'console.warn'],
passes: 2,
},
format: { comments: false },
mangle: { toplevel: true },
}),
],
},
// TypeScript 声明文件合并
{
input: 'src/index.ts',
output: {
file: 'dist/metona-toast.d.ts',
format: 'es',
},
plugins: [dts()],
},
// React 适配器(ESM + CJS),react 为 optional peer 外部依赖
{
input: 'src/react.ts',
external: ['react'],
output: [
{
file: 'dist/react.js',
format: 'es',
exports: 'named',
sourcemap: true,
},
{
file: 'dist/react.cjs',
format: 'cjs',
exports: 'named',
sourcemap: true,
},
],
plugins: basePlugins,
},
{
input: 'src/react.ts',
external: ['react'],
output: {
file: 'dist/react.d.ts',
format: 'es',
},
plugins: [dts()],
},
]),
];