如何使用ES6模块语法(解构)导入属性?

10
import utilityRemove from 'lodash/array/remove';
import utilityAssign from 'lodash/object/assign';
import utilityRandom from 'lodash/number/random';
import utilityFind from 'lodash/collection/find';
import utilityWhere from 'lodash/collection/where';

let util;

util = {};

util.remove = utilityRemove;
util.assign = utilityAssign;
util.random = utilityRandom;
util.find = utilityFind;
util.where = utilityWhere;

使用ES6模块系统有更好的方法吗?


我真的很好奇为什么你不使用 import util from 'lodash' 或者 import {remove, assign, random, find, where} from 'lodash' - Bergi
两种方法都会导入整个库(600KB)。导入单独的模块只会增加约80KB。 - Gajus
你是重新导出 util 还是在同一个文件中使用它?如果你是重新导出它,那么你应该使用 ES6 语法来做这个,并完全跳过创建对象的步骤。 - loganfsmyth
只需使用下一代打包工具即可 :-) - Bergi
@Bergi 非常好。如果你还没有联系过 Babel 的人,你应该去联系一下。 - Gajus
@GajusKuizinas:这不是我的项目,但它看起来确实很有前途 :-) 似乎已经有一个babel集成可用了。 - Bergi
2个回答

5
如果这些是你模块中唯一的符号,我建议缩短名称并使用新的对象简写方式进行:
import remove from 'lodash/array/remove';
import assign from 'lodash/object/assign';
import random from 'lodash/number/random';
import find from 'lodash/collection/find';
import where from 'lodash/collection/where';

let util = {
  remove,
  assign,
  random,
  find,
  where
};

如果这可能会引起冲突,您可以考虑将此部分移动到自己的模块中。能够在测试时替换lodash方法可能是有用的。
由于每个符号来自不同的模块,除非lodash提供了一个用于此目的的组合导入模块,否则无法合并导入。
如果您只是导出一个符号而没有使用它,您还可以考虑使用这种语法::这里
export remove from 'lodash/array/remove';
export assign from 'lodash/object/assign';

任何导入和使用您的模块的人,将看到以下内容:

这将使您的模块更易于使用和理解。

import {remove, assign} from 'your-module';

1
我知道这是一个选项,但我提出这个问题更多的是作为一个设计问题,而不是其他任何问题。鉴于当前ES标准的限制,我并不期望得到令人满意的答案。很遗憾,像https://gist.github.com/gajus/d1fe16bc9605799cce5e 这样的事情是不可能的。 - Gajus
@GajusKuizinas 添加了一个导出转发语法的示例。这会对你有帮助吗? - ssube
3
“我提出这个问题更多是作为一个设计问题,而不是其他任何问题。考虑到当前的ES标准,我并不指望得到一个令人满意的答案。” 那么,Stack Overflow不是讨论这种问题的合适场所。 - Felix Kling
1
如果你正在使用 ESLint 并启用了 "no-redeclare" 规则,它会产生一个错误。如果这是一个有意的覆盖,那么也许你想为该文件/行禁用该规则。 - Felix Kling
制定linting例外是代码异味或不良linting规则的表现。在这种情况下,规则是好的:它做了它预期要做的事情——防止覆盖/掩盖全局范围内存在的变量。如果我没有强迫症,我就不会首先启用此规则。 - Gajus
显示剩余6条评论

3
您可以在一个工具模块中完成此操作:
//utils.js

export remove from 'lodash/array/remove';
export assign from 'lodash/object/assign';
export random from 'lodash/number/random';
export find from 'lodash/collection/find';
export where from 'lodash/collection/where';

然后像这样使用它:

import * as util from './utils';

...

util.random();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接