在 Aurelia(奥雷利亚)中在全球范围内提供像 lodash 这样的库的最佳实践是什么?

What is best practice for making a library like lodash globally available in Aurelia?

本文关键字:lodash 最佳 是什么 雷利亚 Aurelia 范围内      更新时间:2023-09-26

我希望能够以方便的方式使用lodash(_(,但我正在寻找最好的"Aurealia"方法。我可以看到几个选项:

  • 使用下载的副本或 CDN,只需包含<script>标记索引中的引用.html
  • 通过npmjspm(哪个??(安装,然后然后:
    • 在每个模块中import它,这似乎很乏味
    • 使用 Aurelia featurepluginglobalResourcessomeother???功能之一来加载它并使它普遍可用。

这个问题的答案似乎以一种通用的方式表明使用import是最好的,但我对如何做感到困惑。

这些是我的观点 - 持保留态度:

奥雷利亚纯粹主义者

Aurelia Purist 不使用 lodash,而是选择使用 ES6 附带的新数组方法编写现代 JavaScript。有时,Aurelia纯粹主义者在他或她有疑问时咨询你可能不需要强调。 其他时候,Aurelia纯粹主义者咨询你可能不需要jquery。

奥蕾莉亚实用主义者

Aurelia实用主义者认识到Aurelia只是他或她的工具带中的一个工具。Aurelia框架,就像lodash和jQuery一样,帮助Aurelia Pragmatist提供高质量的软件,让用户满意。Aurelia 实用主义者认识到烤蛋糕的方法不止一种,并选择使用他或她最有效的工具。

回答问题...

在Aurelia中,您不会找到任何使_普遍可用的任何东西,没有任何附加条件。 您当然可以使其成为经典的全局,或者您可以使用jspm安装它并根据需要将其导入每个模块。 没有中间立场可以使您免于导入它,也不会让您对使用全局感到难过。

恕我直言,如果您的东西在全球 lodash 上有 deps,这不是世界末日。这是一个偏好的事情,如果你选择一个或另一个,你的项目肯定不会失败。

杰里米的好答案(一如既往(。我就加起来...

尝试尽可能使用 ES6 数组方法(Aurelia Pure ist 观点(。如果你需要一些无法用原生 ECMAScript 复制的东西,或者你真的更喜欢使用 lodash 来安装它,请使用 jspm 安装它:

jspm install lodash

lodash 是在注册表中定义的npm:lodash jspm别名。 jspm将从npm的注册表安装lodash,但会自己管理它 - 在jspm_packages内部并使用system.js模块加载器。

要使用模块中的_,请执行导入:

import _ from 'lodash';

之后,您可以在模块代码中使用_,就像您期望的那样:

let result = _.map(...);

编辑:感谢@VolkerRose的建议。

lodash完全安装的模块

也可以仅从lodash导入所需的功能。如果您只需要map函数,则可以在模块中使用此功能:

import map from 'lodash/map';
// ...
let result = map(...);

当需要lodash/map时,jspm将找到一个lodash模块文件夹(如果安装了版本 4.3.0,则jspm_packages/npm/lodash@4.3.0(,并使用from值的其余部分在该文件夹中进行搜索。在这种情况下,所有lodash模块/文件都在根文件夹中 - 因此使用map.js模块。如果涉及任何子文件夹,则需要使用类似 import map from 'lodash/some/sub/folder/map' (。

lodash模块,

可独立安装

正如@VolkerRose评论中所说,lodash是模块化的,您可以只安装所需的模块。

jspm install npm:lodash.map

这将安装lodash的地图模块。请注意,这次我们需要npm:前缀,因为jspm没有独立lodash模块的别名。

lodash.map模块现在可以像上面一样使用:

import map from 'lodash.map';
// ...
let result = map(...);

你可以用jspm安装lodash

jspm install lodash

然后使用全局导入在应用中全局使用它,如下所示:

import 'lodash';

例:在您的主文件中,它将在窗口上下文中全局加载 LIB。

// importing lodash as global resource
import 'lodash';     
import 'bootstrap';
import {Aurelia, LogManager} from 'aurelia-framework';
import {ConsoleAppender} from 'aurelia-logging-console';
import {authConfig} from './config/auth-config';
LogManager.addAppender(new ConsoleAppender());
LogManager.setLevel(LogManager.logLevel.debug);
export function configure(aurelia: Aurelia) {
    aurelia.use
        .defaultBindingLanguage()
        .defaultResources()
        .history()
        .router()
        .eventAggregator();
    aurelia.start().then(a => a.setRoot());
}