Answers:
import has from 'lodash/has';
更好,因为lodash将所有功能都保存在一个文件中,因此,与其以100k的价格导入整个“ lodash”库,不如仅以has
2k的价格导入lodash的功能更好。
'lodash/has'
不是独立的软件包。has.js
常规'lodash'
软件包的根目录中有一个称为的文件,import has from 'lodash/has'
(或const has = require ('lodash/has
)将加载该文件。还有是在NPM单独的方法包,但他们使用的“点语法”: 'lodash.has'
。如果您不介意为使用的每种方法安装单独的程序包,那么这也是一种行之有效的方法(因此有可能使您的package.json
工作量很大)。
import { has } from 'lodash'
以相同的方式工作,因为其余部分将被删除
import has from 'lodash-es/has'
语法后,我才能获得完整的树震动。从526KB跑到184KB,看到stackoverflow.com/questions/41991178/...
如果使用webpack 4
,则以下代码可摇树。
import { has } from 'lodash-es';
注意事项;
CommonJS模块不可摇树,因此,您一定要使用lodash-es
,这是作为ES模块导出的Lodash库,而不是lodash
(CommonJS)。
lodash-es
的package.json contains "sideEffects": false
,它通知webpack 4软件包中的所有文件都是无副作用的(请参阅https://webpack.js.org/guides/tree-shaking/#mark-the-file-as-side -无效果)。
此信息对于摇晃树至关重要,因为模块捆绑程序不会对摇晃文件进行树状摇晃,即使它们的导出成员未在任何地方使用,这些文件也可能包含副作用。
编辑
从1.9.0版开始,Parcel还支持"sideEffects": false
,因此import { has } from 'lodash-es';
也可以与Parcel一起摇树。它也支持摇晃CommonJS模块,尽管根据我的实验,ES模块的摇晃可能比CommonJS更有效。
import { ... } from 'lodash-es';
我的捆绑包,其中仍然包括整个库。
--module
编译器选项为es6
,es2015
或esnext
。
modules: false
因此它们不会被转换为CommonJS。我现在正在使用Bruce的解决方案,它似乎有效。感谢您的贡献,我确定它可以使用,但是我没有设置。
import has from 'lodash-es/has'
且import {has} from 'lodash-es'
两种变体在使用时都进行树状握手webpack-4
将特定方法导入大括号内
import { map, tail, times, uniq } from 'lodash';
优点:
缺点:
_.map()
语法可以清楚地表明正在使用外部库。是否import _ from 'lodash'
像您的建议一样有效,还是有其他方法可以使用此语法?
_.map()
语法。在进行es6导入和摇树时,您是否能够找到一种方法来保持这种状态?
您可以将它们导入为
import {concat, filter, orderBy} from 'lodash';
或作为
import concat from 'lodash/concat';
import orderBy from 'lodash/orderBy';
import filter from 'lodash/filter';
第二个比第一个进行了优化,因为它仅加载所需的模块
然后像这样使用
pendingArray: concat(
orderBy(
filter(payload, obj => obj.flag),
['flag'],
['desc'],
),
filter(payload, obj => !obj.flag),