如何在共享JavaScriptAMD模块时选择依赖项名称

How to choose the dependencies names when sharing a JavaScript AMD module?

本文关键字:依赖 选择 模块 共享 JavaScriptAMD      更新时间:2023-09-26

我正在编写一个依赖于HumanizeDuration.js的工具(可以是任何其他依赖项)。在main.js:中使用RequireJS

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中的内容。如果CCD_ 16在CCD_。