共享 JavaScript AMD 模块时如何选择依赖项名称?
How to choose the dependencies names when sharing a JavaScript AMD module?
我正在编写一个依赖于 HumanizeDuration.js 的工具(可以是任何其他依赖项)。使用 RequireJS,在 main.js
:
require.config({
paths: {
"humanizeDuration": "./path/to/humanize-duration" /* .js */,
"myTool": "./path/to/my-tool" /* .js */
}
// ...
});
在my-tool.js
中:
define(["humanizeDuration"], function (humanizeDuration) {
// ...
}});
我想分享我的工具(例如 GitHub):
(function (global, factory) {
if (typeof define === "function" && define.amd) {
define(["humanizeDuration"], factory);
} else if (typeof exports === "object") {
module.exports = factory(require("humanizeDuration"));
} else {
global.MyTool = factory(global.humanizeDuration);
}
}(this, function (humanizeDuration) {
// ...
}));
问题是:我应该为依赖选择什么名字?由于这取决于开发人员如何配置他们的 main.js
(对于 RequireJS),我错了吗?
在这里,我选择了 humanizeDuration
,这样我可以告诉开发人员使用这个名称,但是如果他们使用另一个选择 humanize-duration
的工具呢?
如果您知道有一个最常用的名称将 HumanizeDuration.js
称为 AMD 模块,请使用它,但如果没有通用名称或您不能使用,则可以使用 humanizeDuration
确定一个。确保 记录它 以便用户知道会发生什么。那么如果因为你的工具需要 humanizeDuration
但另一个工具需要 humanize-duration
而出现问题,你的工具的用户可以使用 map
:
map: {
'*': {
"humanize-duration": "humanizeDuration"
}
}
这告诉 RequireJS 在任何地方 ('*'
) humanize-duration
都是必需的,而是加载模块 humanizeDuration
。显然,在这种情况下 humanizeDuration
就是 paths
中的内容。如果 humanize-duration
在 paths
.
中,则整个事情可以反向映射
我正在编写一个依赖于 HumanizeDuration.js 的工具(可以是任何其他依赖项)。使用 RequireJS,在 main.js
:
require.config({
paths: {
"humanizeDuration": "./path/to/humanize-duration" /* .js */,
"myTool": "./path/to/my-tool" /* .js */
}
// ...
});
在my-tool.js
中:
define(["humanizeDuration"], function (humanizeDuration) {
// ...
}});
我想分享我的工具(例如 GitHub):
(function (global, factory) {
if (typeof define === "function" && define.amd) {
define(["humanizeDuration"], factory);
} else if (typeof exports === "object") {
module.exports = factory(require("humanizeDuration"));
} else {
global.MyTool = factory(global.humanizeDuration);
}
}(this, function (humanizeDuration) {
// ...
}));
问题是:我应该为依赖选择什么名字?由于这取决于开发人员如何配置他们的 main.js
(对于 RequireJS),我错了吗?
在这里,我选择了 humanizeDuration
,这样我可以告诉开发人员使用这个名称,但是如果他们使用另一个选择 humanize-duration
的工具呢?
如果您知道有一个最常用的名称将 HumanizeDuration.js
称为 AMD 模块,请使用它,但如果没有通用名称或您不能使用,则可以使用 humanizeDuration
确定一个。确保 记录它 以便用户知道会发生什么。那么如果因为你的工具需要 humanizeDuration
但另一个工具需要 humanize-duration
而出现问题,你的工具的用户可以使用 map
:
map: {
'*': {
"humanize-duration": "humanizeDuration"
}
}
这告诉 RequireJS 在任何地方 ('*'
) humanize-duration
都是必需的,而是加载模块 humanizeDuration
。显然,在这种情况下 humanizeDuration
就是 paths
中的内容。如果 humanize-duration
在 paths
.