mirror of
https://gitee.com/layui/layui.git
synced 2025-11-08 10:24:53 +08:00
113 lines
2.8 KiB
JavaScript
113 lines
2.8 KiB
JavaScript
|
|
/**
|
|||
|
|
* 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;
|