如何将 React 应用程序与 rollup 捆绑在一起
How to bundle react app with rollup
我正在寻求有关汇总配置的帮助以构建最简单的 React 应用程序。
目前我捆绑的 js 文件并没有真正捆绑任何依赖项,看起来很简单。
我的汇总配置:
import babel from 'rollup-plugin-babel';
import filesize from 'rollup-plugin-filesize';
import nodeResolve from 'rollup-plugin-node-resolve';
import progress from 'rollup-plugin-progress';
import visualizer from 'rollup-plugin-visualizer';
import commonjs from 'rollup-plugin-commonjs';
import json from 'rollup-plugin-json';
export default {
input: 'src/index.js',
output: [
{
file: 'dist/index.js',
format: 'umd',
globals: {
react: 'React',
'react-dom': 'ReactDOM',
'styletron-react-core': 'StyletronReactCore',
},
sourcemap: 'inline',
},
],
external: ['react', 'react-dom', 'styletron-react-core'],
plugins: [
progress(),
nodeResolve({
browser: true,
}),
json(),
babel({
babelrc: false,
presets: [['es2015', { modules: false }], 'stage-1', 'react'],
plugins: ['external-helpers'],
}),
visualizer(),
filesize(),
commonjs({
include: 'node_modules/**',
}),
],
};
万一有人运行进入这个:
这是我的工作汇总配置。
我也更新了 demo repo。
import babel from 'rollup-plugin-babel';
import filesize from 'rollup-plugin-filesize';
import nodeResolve from 'rollup-plugin-node-resolve';
import progress from 'rollup-plugin-progress';
import visualizer from 'rollup-plugin-visualizer';
import commonjs from 'rollup-plugin-commonjs';
import json from 'rollup-plugin-json';
import replace from 'rollup-plugin-replace';
export default {
input: 'src/index.js',
output: [
{
file: 'dist/index.js',
format: 'umd',
sourcemap: 'inline',
},
],
plugins: [
progress(),
nodeResolve({
browser: true,
}),
json(),
commonjs({
include: [
'node_modules/**',
],
exclude: [
'node_modules/process-es6/**',
],
namedExports: {
'node_modules/react/index.js': ['Children', 'Component', 'PropTypes', 'createElement'],
'node_modules/react-dom/index.js': ['render'],
},
}),
babel({
babelrc: false,
presets: [['es2015', { modules: false }], 'stage-1', 'react'],
plugins: ['external-helpers'],
}),
visualizer(),
filesize(),
replace({
'process.env.NODE_ENV': JSON.stringify('production'),
}),
],
};
我最初的问题是假设 React 依赖是外部的。这对组件库是正确的,但对独立应用程序不正确。我还必须修复一些小问题并命名导入映射。
希望这会节省一些时间。
这里有一个更新的版本,它使用支持的 rollup
插件,适用于偶然发现此问题并需要 TypeScript 支持的任何新手:
// rollup.config.js
import commonjs from '@rollup/plugin-commonjs';
import resolve from '@rollup/plugin-node-resolve';
import replace from '@rollup/plugin-replace';
import peerDepsExternal from 'rollup-plugin-peer-deps-external';
import typescript from '@rollup/plugin-typescript';
import css from 'rollup-plugin-css-only';
export default {
input: 'src/index.ts',
output: [
{
file: 'dist/index.js',
name: 'app',
sourcemap: 'inline',
format: 'iife',
},
],
plugins: [
peerDepsExternal(),
resolve({
browser: true,
dedupe: ['react', 'react-dom'],
}),
replace({
'process.env.NODE_ENV': JSON.stringify('production'),
}),
commonjs(),
typescript({
tsconfig: 'tsconfig.json',
sourceMap: true,
inlineSources: true,
}),
css({ output: 'dist/style.css' }),
],
};
});
这将在 dist
文件夹中输出 index.js
和 style.css
如果您不使用 TypeScript,只需从示例中删除 TypeScript 导入和插件。
我正在寻求有关汇总配置的帮助以构建最简单的 React 应用程序。
目前我捆绑的 js 文件并没有真正捆绑任何依赖项,看起来很简单。
我的汇总配置:
import babel from 'rollup-plugin-babel';
import filesize from 'rollup-plugin-filesize';
import nodeResolve from 'rollup-plugin-node-resolve';
import progress from 'rollup-plugin-progress';
import visualizer from 'rollup-plugin-visualizer';
import commonjs from 'rollup-plugin-commonjs';
import json from 'rollup-plugin-json';
export default {
input: 'src/index.js',
output: [
{
file: 'dist/index.js',
format: 'umd',
globals: {
react: 'React',
'react-dom': 'ReactDOM',
'styletron-react-core': 'StyletronReactCore',
},
sourcemap: 'inline',
},
],
external: ['react', 'react-dom', 'styletron-react-core'],
plugins: [
progress(),
nodeResolve({
browser: true,
}),
json(),
babel({
babelrc: false,
presets: [['es2015', { modules: false }], 'stage-1', 'react'],
plugins: ['external-helpers'],
}),
visualizer(),
filesize(),
commonjs({
include: 'node_modules/**',
}),
],
};
万一有人运行进入这个: 这是我的工作汇总配置。
我也更新了 demo repo。
import babel from 'rollup-plugin-babel';
import filesize from 'rollup-plugin-filesize';
import nodeResolve from 'rollup-plugin-node-resolve';
import progress from 'rollup-plugin-progress';
import visualizer from 'rollup-plugin-visualizer';
import commonjs from 'rollup-plugin-commonjs';
import json from 'rollup-plugin-json';
import replace from 'rollup-plugin-replace';
export default {
input: 'src/index.js',
output: [
{
file: 'dist/index.js',
format: 'umd',
sourcemap: 'inline',
},
],
plugins: [
progress(),
nodeResolve({
browser: true,
}),
json(),
commonjs({
include: [
'node_modules/**',
],
exclude: [
'node_modules/process-es6/**',
],
namedExports: {
'node_modules/react/index.js': ['Children', 'Component', 'PropTypes', 'createElement'],
'node_modules/react-dom/index.js': ['render'],
},
}),
babel({
babelrc: false,
presets: [['es2015', { modules: false }], 'stage-1', 'react'],
plugins: ['external-helpers'],
}),
visualizer(),
filesize(),
replace({
'process.env.NODE_ENV': JSON.stringify('production'),
}),
],
};
我最初的问题是假设 React 依赖是外部的。这对组件库是正确的,但对独立应用程序不正确。我还必须修复一些小问题并命名导入映射。
希望这会节省一些时间。
这里有一个更新的版本,它使用支持的 rollup
插件,适用于偶然发现此问题并需要 TypeScript 支持的任何新手:
// rollup.config.js
import commonjs from '@rollup/plugin-commonjs';
import resolve from '@rollup/plugin-node-resolve';
import replace from '@rollup/plugin-replace';
import peerDepsExternal from 'rollup-plugin-peer-deps-external';
import typescript from '@rollup/plugin-typescript';
import css from 'rollup-plugin-css-only';
export default {
input: 'src/index.ts',
output: [
{
file: 'dist/index.js',
name: 'app',
sourcemap: 'inline',
format: 'iife',
},
],
plugins: [
peerDepsExternal(),
resolve({
browser: true,
dedupe: ['react', 'react-dom'],
}),
replace({
'process.env.NODE_ENV': JSON.stringify('production'),
}),
commonjs(),
typescript({
tsconfig: 'tsconfig.json',
sourceMap: true,
inlineSources: true,
}),
css({ output: 'dist/style.css' }),
],
};
});
这将在 dist
文件夹中输出 index.js
和 style.css
如果您不使用 TypeScript,只需从示例中删除 TypeScript 导入和插件。