使用requireJS

时间:2015-06-04 14:01:50

标签: javascript jquery 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文件声明依赖项?

2 个答案:

答案 0 :(得分:2)

当使用任何类型的模块加载系统时,通常无法避免紧耦合。

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

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

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

答案 1 :(得分:1)

  

这不是js代码与requirejs库的紧密耦合吗?

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

  

有没有其他方法可以在集中的位置为项目的每个js文件声明依赖项?

如果您不希望define次调用显示在每个文件中,并且仍然保留代码的模块性,并且所有依赖项都位于“集中位置” “,RequireJS没有内置支持。您可以为此目的劫持shim配置选项,但我不认为这是一件简单的事情。 shim设置几乎是一个允许使用带有RequireJS的非模块化代码并且它依赖于全局空间上可用的符号的拐杖,这违背了保持模块性的目标。否则,您可以设计一个可以读取文件的构建过程,并根据此文件将每个源文件构建到一个正确的AMD模块中,方法是将代码包装到define调用中。