React项目用lodash-es为啥Tree Shaking没效果?
大家好,我在React项目里改用lodash-es做Tree Shaking优化,但打包后发现整个lodash都被引入了。比如这样写:
import _ from 'lodash-es';
const ItemList = ({ items }) => (
<ul>
{_.map(items, item => (
<li key={item.id}>{item.name}</li>
))}
</ul>
);
按说应该只打包map方法,但看bundle分析整个lodash都进去了。试过改成解构导入:
import { map } from 'lodash-es';
还是没变化,这是哪里出问题了?项目用create-react-app脚手架,没 ejected过…
关键是 import 的方式要精确到具体方法,不能用大括号解构。另外,create-react-app 默认的生产环境打包可能没完全启用 tree shaking,记得加个环境变量:
这样再打包看看,应该就只留下用到的 map 方法了。如果还不行,可能是其他地方又偷偷引用了整个 lodash,去找找看有没有
import _ from 'lodash-es'这种写法。