1

我一直在阅读RequireJS

我不明白

define(["./cart", "./inventory"], function(cart, inventory) {...}

 define(["cart", "inventory"], function(cart, inventory) {...}

“./”有什么区别?以及我们必须做的其他选择,以使用没有“./”的依赖路径?

4

6 回答 6

5

一般来说, RequireJS 中模块名称中.,..和的存在/与 HTTP 路径的含义相同。

依赖项中的存在./告诉 RequireJS 从当前目录开始搜索。如果您想要使用一个您知道与需要它的模块位于同一目录中的模块,这将非常有用。假设 moduleA 需要 moduleB 并且两者都在同一个目录中,那么 moduleA 就可以 require "./moduleB"。这样做的一个好处是您不必担心模块的存储位置。如果您移动它们但它们总是在同一个目录中,那么模块A 将始终找到模块B。

另一件事是,如果您require("moduleX")有多个名为 moduleX 的模块可用,您将获得哪个模块?相对路径阐明了您将获得哪一个。

你问如何摆脱./First,我会问你真的想摆脱它吗?在我给出的场景中,两个模块位于同一目录中,并且这种关系是稳定的,那么摆脱./. 它实际上可以帮助人们阅读代码。如果您需要的是 jQuery 之类的东西,它恰好在某个时刻与另一个模块位于同一目录中,但可以合法地安装在其他地方,并且您可能希望它对于给定的应用程序是唯一的,那么它使感觉它位于全球知名的位置。为此,您可以paths在 requirejs 配置中使用,例如:

paths: {
   'jquery': 'external/jquery-1.9.1'
}

这是实际应用程序的实际代码部分。无论哪个模块想要 jquery,它都会发出require("jquery"). 它不必担心 jquery 是否相对于自身定位。您可以为您喜欢的任何模块指定这样的路径,而不仅仅是 jQuery。如果 jQuery 将来移动到不同的位置,或者您想从 CDN 提供它,那么上面代码片段中的这个映射会被编辑,但require("jquery")仍然有效。

于 2013-10-29T11:39:53.153 回答
1

在您的代码上下文中,这意味着在与当前执行脚本相同的目录中定义购物车。

另一种方法是使用绝对路径:

/var/www/site/cart

作为:

define(["/var/www/site/cart", "/var/www/site/inventory"], function(cart, inventory) {...}
于 2013-10-29T10:25:57.593 回答
1

维基百科

define(["./cart", "./inventory"], function(cart, inventory) {...}

它在文件系统的当前目录中搜索特定文件

define(["cart", "inventory"], function(cart, inventory) {...}

它在文件系统的根目录中搜索特定文件

于 2013-10-29T10:28:50.213 回答
0

./is 引用当前目录,获取当前与脚本在同一目录下的模块。No./指本机和已安装模块所在的节点路径(例如:net、、fs以及任何使用 install via的内容npm)使用绝对路径可以到达文件系统中的任何位置(/i/like/node/js/modules.js

于 2013-10-29T10:25:52.403 回答
0

' /' 指根目录和

' ./' 指的是当前目录

define(["./cart", "./inventory"]:这将在当前执行脚本的目录中引用购物车。

于 2013-10-29T10:26:35.250 回答
0

./表示您将留在同一目录中。

于 2013-10-29T10:33:01.720 回答