Files
layui/rollup.config.mjs
2025-11-04 15:09:10 +08:00

113 lines
2.8 KiB
JavaScript
Raw Permalink 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.

/**
* Rollup Config
*/
import path from 'node:path';
import { fileURLToPath } from 'node:url';
import { createRequire } from 'node:module';
import babel from '@rollup/plugin-babel';
import resolve from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';
import terser from '@rollup/plugin-terser';
import replace from '@rollup/plugin-replace';
import { banner } from './scripts/rollup-plugins.mjs';
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const require = createRequire(import.meta.url);
const pkg = require('./package.json');
const version = pkg.version;
const name = 'layui';
const input = path.resolve(__dirname, './src/index.js');
const DEST = process.env.DEST || 'dist';
const outputDir = path.resolve(__dirname, `./${DEST}`);
const isDevMode = process.env.MODE === 'dev';
// config
const options = {
terser: {
compress: {
passes: 2, // 提高压缩率,默认 1
},
format: {
ascii_only: true, // 转义 unicode 字符
comments: false,
},
},
babel: {
exclude: 'node_modules/**', // 只编译项目源码
babelHelpers: 'bundled',
},
};
const rollupConfig = [];
const pushRollupConfig = (opts, callback) => {
opts = {
minify: true,
...opts,
};
const esm = opts.format === 'es' ? '.esm' : '';
const config = {
input,
output: {
file: `${outputDir}/${name}${esm}.js`,
format: opts.format || 'iife',
sourcemap: true,
plugins: [],
},
plugins: [
replace({
preventAssignment: true,
values: {
__VERSION__: version,
},
}),
resolve(),
commonjs(),
babel(options.babel),
],
};
// 开发模式不压缩
if (opts.minify && !isDevMode) {
config.output.plugins.push(
terser(options.terser),
banner({
comment: `/** ${version} | ${pkg.license} Licensed */`,
}),
);
}
// iife 模式的全局变量名
if (opts.format === 'iife') {
config.input = input.replace(/index\.js$/, 'index.iife.js');
config.output.name = name;
}
callback?.(config);
rollupConfig.push(config);
};
pushRollupConfig({ format: 'iife' }); // 浏览器 iife 版本
pushRollupConfig({ format: 'es' }); // 浏览器 esm 版本
// Node 构建环境 esm 版本
if (!isDevMode) {
pushRollupConfig({ format: 'es', minify: false }, (config) => {
config.external = ['jquery']; // v2 外部依赖v3 正式版将考虑移除 jQuery 依赖)
config.output = {
...config.output,
sourcemap: false,
dir: outputDir,
preserveModules: true, // 保留独立模块,以支持 tree-shaking
preserveModulesRoot: path.resolve(__dirname, '../src'),
};
delete config.output.file;
delete config.output.banner;
return config;
});
}
export default rollupConfig;