feat: manually mirror opencoze's code from bytedance
Change-Id: I09a73aadda978ad9511264a756b2ce51f5761adf
This commit is contained in:
97
common/_templates/solid-component/rollup.config.mjs
Normal file
97
common/_templates/solid-component/rollup.config.mjs
Normal file
@@ -0,0 +1,97 @@
|
||||
import { fileURLToPath } from 'node:url';
|
||||
import path from 'node:path';
|
||||
import fs from 'fs';
|
||||
|
||||
import tailwindcss from 'tailwindcss';
|
||||
import ts from 'rollup-plugin-ts';
|
||||
import postcss from 'rollup-plugin-postcss';
|
||||
import { nodeExternals } from 'rollup-plugin-node-externals';
|
||||
import cleanup from 'rollup-plugin-cleanup';
|
||||
import autoprefixer from 'autoprefixer';
|
||||
import replace from '@rollup/plugin-replace';
|
||||
import { nodeResolve } from '@rollup/plugin-node-resolve';
|
||||
import json from '@rollup/plugin-json';
|
||||
import commonjs from '@rollup/plugin-commonjs';
|
||||
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
const __dirname = path.dirname(__filename);
|
||||
const packageJson = JSON.parse(fs.readFileSync('./package.json', 'utf-8'));
|
||||
|
||||
// CI 环境下不需要构建这么多版本
|
||||
const isInCIEnv = process.env.CI === 'true';
|
||||
|
||||
const banner =
|
||||
'/*!\n' +
|
||||
` * ${packageJson.name} v${packageJson.version}\n` +
|
||||
` * (c) 2023-${new Date().getFullYear()} Flow team\n` +
|
||||
' */';
|
||||
|
||||
const outputConfigs = {
|
||||
esm: {
|
||||
banner,
|
||||
format: 'es',
|
||||
file: path.resolve(__dirname, 'dist/esm/index.js'),
|
||||
},
|
||||
umd: {
|
||||
banner,
|
||||
format: 'umd',
|
||||
file: path.resolve(__dirname, 'dist/umd/index.js'),
|
||||
},
|
||||
};
|
||||
|
||||
const createReplacePlugin = () =>
|
||||
replace({
|
||||
preventAssignment: true,
|
||||
values: {
|
||||
__TEST__: false,
|
||||
__VERSION__: `'${packageJson.version}'`,
|
||||
__DEV__: process.env.NODE_ENV === 'development',
|
||||
},
|
||||
});
|
||||
|
||||
const createConfig = (format, output) => {
|
||||
const isUmdBuild = /^umd/.test(format);
|
||||
const isEsmBuild = /^esm/.test(format);
|
||||
|
||||
const input = path.resolve(__dirname, './src/index.ts');
|
||||
|
||||
// TODO: 这里替换成真实的名称
|
||||
if (isUmdBuild) {
|
||||
output.name = 'FlowFoo';
|
||||
}
|
||||
|
||||
return {
|
||||
input,
|
||||
output,
|
||||
plugins: [
|
||||
commonjs(),
|
||||
createReplacePlugin(),
|
||||
nodeResolve(),
|
||||
cleanup(),
|
||||
postcss({
|
||||
plugins: [tailwindcss(), autoprefixer()],
|
||||
autoModules: true,
|
||||
modules: {
|
||||
generateScopedName: '[name][local]_[hash:base64:5]',
|
||||
},
|
||||
extensions: ['.css', '.less'],
|
||||
}),
|
||||
json({
|
||||
namedExports: false,
|
||||
}),
|
||||
// ESM 仅打包必要内容
|
||||
// UMD 由于需要放到 page 上直接运行,因此需要将所有依赖都打包进来
|
||||
isEsmBuild
|
||||
? nodeExternals({ devDeps: true, peerDeps: true, deps: true })
|
||||
: null,
|
||||
ts({
|
||||
transpiler: 'swc',
|
||||
tsconfig: path.resolve(__dirname, './tsconfig.build.json'),
|
||||
}),
|
||||
].filter(Boolean),
|
||||
};
|
||||
};
|
||||
|
||||
export default Object.keys(outputConfigs)
|
||||
.filter(k => (isInCIEnv ? k === 'esm' : true))
|
||||
.map(format => createConfig(format, outputConfigs[format]));
|
||||
Reference in New Issue
Block a user