import resolve from '@rollup/plugin-node-resolve'; import commonjs from '@rollup/plugin-commonjs'; import terser from '@rollup/plugin-terser'; import typescript from '@rollup/plugin-typescript'; 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, }), ]; const devPlugins = isDev ? [ serve({ open: true, contentBase: ['site', 'dist'], port: 3001, }), livereload({ watch: ['src', 'site'], }), ] : []; export default [ // UMD development (always built) { input: 'src/index.ts', output: { file: 'dist/metona-sqlark.js', format: 'umd', name: 'MetonaSqlark', exports: 'named', sourcemap: true, }, // react/vue 为 peer dependency(integrations 子路径),不打包 external: ['react', 'vue'], plugins: [...basePlugins, ...devPlugins], }, // Only build all formats in production ...(isDev ? [] : [ // ES Module { input: 'src/index.ts', output: { file: 'dist/metona-sqlark.esm.js', format: 'es', exports: 'named', sourcemap: true, }, external: ['react', 'vue'], plugins: basePlugins, }, // CommonJS(.cjs 后缀:package.json 为 type:module,.js 会被 Node 按 ESM 解析) { input: 'src/index.ts', output: { file: 'dist/metona-sqlark.cjs', format: 'cjs', exports: 'named', sourcemap: true, }, external: ['react', 'vue'], plugins: basePlugins, }, // UMD minified { input: 'src/index.ts', output: { file: 'dist/metona-sqlark.min.js', format: 'umd', name: 'MetonaSqlark', exports: 'named', sourcemap: false, }, external: ['react', 'vue'], 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 declarations bundle { input: 'src/index.ts', output: { file: 'dist/metona-sqlark.d.ts', format: 'es', }, plugins: [dts()], }, // v0.8.0: React / Vue 集成产物。 // 此前 package.json 的 "./react" / "./vue" 直接指向 **src/ 下的裸 TS 源码**, // 而这两个文件带 `// @ts-nocheck` → 使用者拿到的是未编译代码 + 类型为 any // 的声明("开箱即用 hooks"这一宣称不成立)。现在构建成真实 ESM 产物, // 配套手写精确声明(见 src/integrations/*.d.ts 的说明)。 // react / vue 保持 external(peer dependency),不打包进产物。 { input: 'src/integrations/react.ts', output: { file: 'dist/react.js', format: 'es', sourcemap: true }, external: ['react'], plugins: basePlugins, }, { input: 'src/integrations/vue.ts', output: { file: 'dist/vue.js', format: 'es', sourcemap: true }, external: ['vue'], plugins: basePlugins, }, ]), ];