Skip to content

Commit

Permalink
feat: support rolldown
Browse files Browse the repository at this point in the history
  • Loading branch information
XGHeaven committed Nov 15, 2024
1 parent 073a6cb commit cbbeacf
Show file tree
Hide file tree
Showing 7 changed files with 251 additions and 45 deletions.
1 change: 1 addition & 0 deletions examples/react-component/build.config.mts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ export default defineConfig({
sourceMaps: false,
bundle: {
formats: ['esm', 'es2017'],
bundler: 'rolldown'

Check failure on line 15 in examples/react-component/build.config.mts

View workflow job for this annotation

GitHub Actions / CI (18)

Missing trailing comma
},
alias: {
'@': './src',
Expand Down
2 changes: 2 additions & 0 deletions examples/react-component/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
export { default as Button } from '@/components/Button';
export { default as Test } from '@/components/Test';
export { default as Input } from '@/components/Input';

export const a = 1
1 change: 1 addition & 0 deletions packages/pkg/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@
"picocolors": "^1.0.0",
"postcss": "^8.4.31",
"postcss-plugin-rpx2vw": "^1.0.0",
"rolldown": "^0.14.0",
"rollup": "^4.0.0",
"rollup-plugin-styler": "^1.8.0",
"rollup-plugin-visualizer": "^5.12.0",
Expand Down
91 changes: 56 additions & 35 deletions packages/pkg/src/helpers/getRollupOptions.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { RolldownOptions } from 'rolldown'
import escapeStringRegexp from 'escape-string-regexp';
import commonjs from '@rollup/plugin-commonjs';
import { nodeResolve } from '@rollup/plugin-node-resolve';
Expand Down Expand Up @@ -102,41 +103,61 @@ export function getRollupOptions(
// Add full path for relative path alias
alias[key] = taskConfig.alias[key].startsWith('.') ? path.resolve(rootDir, taskConfig.alias[key]) : taskConfig.alias[key];
});
plugins.push(
replace({
values: {
...getDefaultDefineValues(taskRunnerContext.mode),
// User define can override above.
...taskConfig.define,
},
preventAssignment: true,
}),
styles((taskConfig.modifyStylesOptions ?? [((options) => options)]).reduce(
(prevStylesOptions, modifyStylesOptions) => modifyStylesOptions(prevStylesOptions),
defaultStylesOptions,
)),
image(),
json(),
nodeResolve({ // To locates modules using the node resolution algorithm.
extensions: [
'.mjs', '.js', '.json', '.node', // plugin-node-resolve default extensions
'.ts', '.jsx', '.tsx', '.mts', '.cjs', '.cts', // @ice/pkg default extensions
...(taskConfig.extensions || []),
],
browser: taskConfig.browser,
}),
commonjs({ // To convert commonjs to import, make it compatible with rollup to bundle
extensions: [
'.js', // plugin-commonjs default extensions
'.jsx', '.ts', '.tsx',
...(taskConfig.extensions || []),
],
transformMixedEsModules: true,
}),
bundleAliasPlugin({
entries: alias,
}),
);

if (taskConfig.bundler === 'rolldown') {
const rolldownOptions = rollupOptions as RolldownOptions
rolldownOptions.resolve = {
alias

Check failure on line 110 in packages/pkg/src/helpers/getRollupOptions.ts

View workflow job for this annotation

GitHub Actions / CI (18)

Missing trailing comma
};
rolldownOptions.define = {
...getDefaultDefineValues(taskRunnerContext.mode),
// User define can override above.
...taskConfig.define,
}
plugins.push(
styles((taskConfig.modifyStylesOptions ?? [((options) => options)]).reduce(
(prevStylesOptions, modifyStylesOptions) => modifyStylesOptions(prevStylesOptions),
defaultStylesOptions,
)),
image(),
)
} else {
plugins.push(
replace({
values: {
...getDefaultDefineValues(taskRunnerContext.mode),
// User define can override above.
...taskConfig.define,
},
preventAssignment: true,
}),
styles((taskConfig.modifyStylesOptions ?? [((options) => options)]).reduce(
(prevStylesOptions, modifyStylesOptions) => modifyStylesOptions(prevStylesOptions),
defaultStylesOptions,
)),
image(),
json(),
nodeResolve({ // To locates modules using the node resolution algorithm.
extensions: [
'.mjs', '.js', '.json', '.node', // plugin-node-resolve default extensions
'.ts', '.jsx', '.tsx', '.mts', '.cjs', '.cts', // @ice/pkg default extensions
...(taskConfig.extensions || []),
],
browser: taskConfig.browser,
}),
commonjs({ // To convert commonjs to import, make it compatible with rollup to bundle
extensions: [
'.js', // plugin-commonjs default extensions
'.jsx', '.ts', '.tsx',
...(taskConfig.extensions || []),
],
transformMixedEsModules: true,
}),
bundleAliasPlugin({
entries: alias,
}),
);
}
if (commandArgs.analyzer) {
plugins.push(visualizer({
title: `Rollup Visualizer(${taskName})`,
Expand Down
10 changes: 7 additions & 3 deletions packages/pkg/src/tasks/bundle.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import * as path from 'path';
import * as rollup from 'rollup';
import * as rolldown from 'rolldown'
import { Watcher } from 'rollup/dist/shared/watch.js';
import { toArray } from '../utils.js';
import EventEmitter from 'node:events';
import type {
BundleTaskConfig,
OutputFile,
OutputResult,
TaskRunnerContext,
Expand All @@ -22,6 +24,7 @@ import type {
import type { FSWatcher } from 'chokidar';
import { getRollupOptions } from '../helpers/getRollupOptions.js';
import { Runner } from '../helpers/runner.js';
import { RolldownOptions } from 'rolldown';

export function createBundleTask(taskRunningContext: TaskRunnerContext) {
return new BundleRunner(taskRunningContext);
Expand Down Expand Up @@ -220,16 +223,17 @@ async function rawBuild(
const rollupOutputOptions = toArray(rollupOptions.output);
const { buildTask } = taskRunnerContext;
const { name: taskName } = buildTask;
const config = buildTask.config as BundleTaskConfig

const bundle = await rollup.rollup(rollupOptions);
const bundle = config.bundler === 'rolldown' ? await rolldown.rolldown(rollupOptions as RolldownOptions) : await rollup.rollup(rollupOptions);

const buildResult = await writeFiles(rollupOutputOptions, bundle.write);
const buildResult = await writeFiles(rollupOutputOptions, bundle.write.bind(bundle));

await bundle.close();

return {
taskName,
modules: bundle.cache.modules,
// modules: bundle.cache.modules,
...buildResult,
};
}
Expand Down
6 changes: 6 additions & 0 deletions packages/pkg/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,12 @@ export interface BundleUserConfig {
* Resolve node module by prefer using `browser` field in package.json.
*/
browser?: boolean;

/**
* Which bundler to use.
* @default 'rollup'
*/
bundler?: 'rollup' | 'rolldown' | 'rslib';
}


Expand Down
Loading

0 comments on commit cbbeacf

Please sign in to comment.