如何优化 vite 打包后的文件大小?用的一个库发现不同的 import 姿势打包出来的大小差了近 5 倍

2022-03-24 21:44:30 +08:00
 TWorldIsNButThis

demo 地址 https://stackblitz.com/edit/vitejs-vite-cvb6u1?file=src/App.ts
同样引入三个东西,第一种压缩前 44k ,第二种 17k ,第三种 9k
像这种兼容 commonjs 和 esm 的库,想要实现最优化打包大小每次 import 的时候是不是都要保证是从 es 目录下面单独引入的?
有没有插件可以实现把支持 esm 的库的引入都自动转成 es 目录下的引入?

import { List, NonEmptyList, Maybe } from 'purify-ts';

// import { Maybe } from 'purify-ts/Maybe';
// import { NonEmptyList } from 'purify-ts/NonEmptyList';
// import { List } from 'purify-ts/List';

// import { Maybe } from 'purify-ts/es/Maybe';
// import { NonEmptyList } from 'purify-ts/es/NonEmptyList';
// import { List } from 'purify-ts/es/List';

const columns = [
  { id: 1, itemIds: [1, 2] },
  { id: 2, itemIds: [3] },
];

function App() {
  Maybe.of(1).chain((value) => Maybe.fromNullable(value).ifJust(console.log));
  NonEmptyList.fromArray([1, 2, 3]).map(NonEmptyList.head).ifJust(console.log);
  List.find(({ id }) => id === 1, columns).ifJust(console.log);

  return 'hello';
}

const a = document.createElement('div');
a.innerText = App();
document.querySelector('#root')?.appendChild(a);

1419 次点击
所在节点    问与答
7 条回复
noe132
2022-03-24 21:54:37 +08:00
这是你用的库对 esmodule treeshaking 支持不好。建议提个 issue
gouflv
2022-03-24 22:15:12 +08:00
没记错的话,模块的 package.json 需要写 module 字段导出 esm 包的主文件
Leviathann
2022-03-25 00:40:46 +08:00
@noe132
@gouflv 看了下这个库的 package.json 只有 main 没有 module ,不知是不是这个原因
mxT52CRuqR6o5
2022-03-25 10:41:43 +08:00
有 babel 插件可以做这种事
mxT52CRuqR6o5
2022-03-25 10:43:17 +08:00
babel-plugin-import
Charrlles
2022-03-25 11:04:47 +08:00
vite-plugin-imp 这个可以自定义引入的规则
TWorldIsNButThis
2022-03-25 22:01:25 +08:00
@Charrlles 感谢 今天试了下的确解决了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/842722

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX