- 包声明 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 子包四路加载全部正常
139 lines
3.2 KiB
JavaScript
139 lines
3.2 KiB
JavaScript
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()],
|
||
},
|
||
]),
|
||
];
|