ada*_*ng3 103 javascript lodash
使用webpack,我试图导入isEqual,因为lodash
似乎导入了所有内容.我尝试过以下操作但没有成功:
import { isEqual } from 'lodash'
import isEqual from 'lodash/lang'
import isEqual from 'lodash/lang/isEqual'
import { isEqual } from 'lodash/lang'
import { isEqual } from 'lodash/lang'
Run Code Online (Sandbox Code Playgroud)
Pat*_*und 164
您可以安装lodash.isequal
为单个模块而无需安装整个lodash软件包,如下所示:
npm install --save lodash.isequal
Run Code Online (Sandbox Code Playgroud)
使用ECMAScript 5和CommonJS模块时,您可以像这样导入它:
var isEqual = require('lodash.isequal');
Run Code Online (Sandbox Code Playgroud)
使用ES6模块,这将是:
import isEqual from 'lodash.isequal';
Run Code Online (Sandbox Code Playgroud)
您可以在代码中使用它:
const obj1 = {username: 'peter'};
const obj2 = {username: 'peter'};
const obj3 = {username: 'gregory'};
isEqual(obj1, obj2) // returns true
isEqual(obj1, obj3) // returns false
Run Code Online (Sandbox Code Playgroud)
资料来源:Lodash文件
导入后,您可以isEqual
在代码中使用该功能.请注意,_
如果以这种方式导入它,它不是命名对象的一部分,因此
不要使用_.isEqual
,而是直接使用它来引用它isEqual
.
替代方案:使用 lodash-es
正如@kimamula所指出的:
使用webpack 4和lodash-es 4.17.7及更高版本,此代码可以正常工作.
import { isEqual } from 'lodash-es';
Run Code Online (Sandbox Code Playgroud)
这是因为webpack 4支持sideEffects标志,lodash-es
4.17.7及更高版本包含标志(设置为false
).
为什么不使用带斜线的版本? 这个问题的其他答案表明你也可以使用破折号而不是点,如下所示:
import isEqual from 'lodash/isequal';
Run Code Online (Sandbox Code Playgroud)
这也有效,但有两个小缺点:
npm install --save lodash
),而不仅仅是小的单独的lodash.isequal包; 存储空间便宜且CPU速度很快,所以你可能不关心这个isEqual
平均大28%(尝试过webpack 2和webpack 3,有或没有Babel,有或没有Uglify)Jo *_*gue 54
如果您只想包含isEqual
而不是其他lodash
功能(对于保持小包大小很有用),您可以在ES6中执行此操作;
import isEqual from 'lodash/isEqual'
Run Code Online (Sandbox Code Playgroud)
这几乎与lodash
README中描述的相同,只是它们使用require()
语法.
var at = require('lodash/at');
Run Code Online (Sandbox Code Playgroud)
kim*_*ula 22
使用webpack 4和lodash-es 4.17.7及更高版本,此代码可以正常工作.
import { isEqual } from 'lodash-es';
Run Code Online (Sandbox Code Playgroud)
这是因为webpack 4支持sideEffects
flag和lodash-es 4.17.7及更高版本包括标志(设置为false
).
编辑
从版本1.9.0开始,Parcel也支持"sideEffects": false
,因此import { isEqual } from 'lodash-es';
也可以使用Parcel进行树形抖动.
我认为值得注意的是每个方法包的 lodash 文档至少截至 2020 年 6 月才能回答这个问题:
\n\n\nLodash 方法可在独立的每个方法包中使用,例如 lodash.mapvalues、lodash.pickby 等。这些包仅包含该方法所依赖的代码。
\n但是,不鼓励使用这些包,它们将在 v5 中删除。
\n尽管它们看起来更轻量级,但它们通常会增加项目中 node_modules 和 webpack/rollup 包的大小,而项目传递地依赖于多个每个方法包和/或主 lodash 包。虽然主 lodash 包中的许多方法共享代码,但每个方法包在内部捆绑了它们所依赖的任何代码的副本。
\n
该文档实际上建议:
\n\n\n如果您直接导入或需要方法,请不要担心\xe2\x80\x94,例如
\nconst throttle = require(\'lodash/throttle\')
,只有您的包使用的lodash代码子集才会捆绑在使用您的包的项目中。
此外,此页面对不同的导入选项和生成的构建大小进行了一些非常有趣的研究:https://www.blazemeter.com/blog/the- Correct-way-to-import-lodash-libraries-a-benchmark
\n与 webpack 无关,但我会在这里添加它,因为很多人目前正在转向打字稿。
您还可以import isEqual from 'lodash/isEqual';
在打字稿中使用带有esModuleInterop
编译器选项 (tsconfig.json) 中的标志的lodash 导入单个函数
例子
{
"compilerOptions": {
"module": "commonjs",
"target": "es5",
"lib": ["es6", "dom"],
"moduleResolution": "node",
"esModuleInterop": true,
...
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
61204 次 |
最近记录: |