与 requireJS 紧密耦合的代码

Tightly coupled code with requireJS

我对 javascript 的了解很浅薄。我计划在我的动态脚本加载和依赖管理应用程序中实现 RequireJS。 经历 example

示例中有 4 个 js 文件 purchase.js、products.js、credits.js。 main.js。

main.js 初始化流程。我明白 main.js 需要 require 方法。

require(["purchase"],function(purchase){
  purchase.purchaseProduct();
});

但是每个 js 文件都以 define() 开头,例如来自 purchase.js

的代码片段
define(["credits","products"], function(credits,products) {

  console.log("Function : purchaseProduct");

  return {
    purchaseProduct: function() {

现在按照这个例子说,如果我的项目中有 n 个 js 文件,我会以这种方式编写代码。将来我需要从我的应用程序中删除 RequireJS。我必须编辑 n js 文件。

这是不是js代码和requirejs库的耦合太紧了?与在 html 文件中使用 script 标记包含 js 文件的标准方式不同。 如果我在 html 文件中包含带有脚本标记的脚本。我不必为任何更改编辑所有 js 文件。

有没有其他方法可以集中声明项目的每个js文件的依赖关系?

使用任何类型的模块加载系统时,紧耦合通常是不可避免的。

在 requirejs 的情况下幸运的是,但每个文件需要更多的初始工作:

function myModule(dependency1, dependency2) {
  //usual code
}

if (typeof define !== "undefined") {
  define(["dependency1", "dependency2"], myModule);
} else {
  myModule(dependency1, dependency2)
}

Isn't this too much tight coupling of js code with requirejs library?

您在问题中显示的内容并不表示与 RequireJS 紧密耦合。您正在使用 AMD 规范来声明您的模块并加载它们。唯一需要做的就是你需要有一个与 AMD 兼容的模块加载器。这可能是 RequireJS,也可能是 Almond or it could be Node.js with the node-amd-loader 包。我相信还有更多选择。

Is there any other way to declare the dependencies for every js file of the project in a centralized place?

如果您不希望 define 调用出现在您的每个文件中,并且仍然保留代码的模块化,并且所有依赖项都已找到在 "centralized place" 中,RequireJS 没有对此的内置支持。为此,您也许可以劫持 shim 配置选项,但我认为这不是一件简单的事情。 shim 设置几乎是一个拐杖,它允许将非模块化代码与 RequireJS 一起使用,并且它依赖于全局 space 上可用的符号,这违背了保持模块化的目标。否则,您可以设计一个构建过程来读取一个文件,并在该文件的基础上通过将代码包装到 define 调用中,将每个源文件构建到适当的 AMD 模块中。