Yus*_*ick 5 javascript rollup bundling-and-minification reactjs tree-shaking
我正在学习一些有关捆绑的知识,因为我正在努力更新一个使用Rollup的小型内部React组件库。
当前状态
现在,所有组件都被捆绑到一个index.js文件中。每当我导入一个或多个...
import { Button, Input } from 'my-library';
Run Code Online (Sandbox Code Playgroud)
...整个库正在导入。我想解决这个问题。
此时,我已经更新了汇总以创建命名的组件文件,因此可以执行如下导入:
import Button from 'my-library/Button';
Run Code Online (Sandbox Code Playgroud)
当我只使用一个组件时,这很好,但是每当我需要一个以上组件时,例如必须从同一库中导入五行,就会感到多余。但是,每当我再次尝试对其进行分解时,整个库都将被导入。
目标
我希望能够从上面运行相同的经过结构分解的import语句,但只能导入这两个组件。
rollup.config
export default {
experimentalCodeSplitting: true,
input: [
'src/index.js',
'src/components/Button/Button.js',
'src/components/Input/Input.js',
],
output: {
exports: 'named',
dir: 'dist/',
format: 'cjs',
chunkFileNames: 'chunks/[name]-[hash].js',
},
plugins: [
external(),
babel({ exclude: 'node_modules/**', plugins: ['external-helpers'] }),
resolve(),
commonjs(),
],
};
Run Code Online (Sandbox Code Playgroud)
index.js
import Button from './components/Button/Button';
import Input from './components/Input/Input';
exports.Button = Button;
exports.Input = Input;
Run Code Online (Sandbox Code Playgroud)
因此,这将产生两个文件,Button.js并Input.js为每个组件构建了一个很棒的文件。但是是否有可能在一条import语句中引入两个组件而没有剩下的库?
笔记
该库当前使用汇总,但如果有更简单的解决方案,我认为我们不需要它。
我觉得使用该experimentalCodeSplitting功能不是理想的解决方案,而且我真的不喜欢拥有块文件。
感谢您的帮助!
我想说将这种优化留给主机应用程序。让你的包变小,但使用起来并不奇怪。如果您启用静态 ES6 导入,则它们可以在主机捆绑时进行树状摇动。
如果你导出它
export { default as Button } from './components/Button/Button'
export { default as Input } from './components/Input/Input'
Run Code Online (Sandbox Code Playgroud)
并像这样导入
import { Button } from 'my-library';
Run Code Online (Sandbox Code Playgroud)
用户可以Input在捆绑时将其从您的库中摇走。但将这些选择留给您的用户和他们选择的捆绑器。
现在,您可以使用files和main声明来package.json允许多种类型的导入。如果您设置main为指向您的index.js,但包含files导出组件的文件夹(例如,作为它们自己的 index.js 中的默认导出),则可以通过两种方式访问它们。
请注意,这仍然是完全多余的,并且可能有点不正统,并且可能会导致您的包实际上增加大小。
| 归档时间: |
|
| 查看次数: |
693 次 |
| 最近记录: |