我一直在阅读RequireJS
我没有区别
define(["./cart", "./inventory"], function(cart, inventory) {...}
和
define(["cart", "inventory"], function(cart, inventory) {...}
“./”有什么不同?我们还有什么办法可以使用没有“./”的依赖路径?
答案 0 :(得分:5)
一般来说,RequireJS中模块名称中.
,..
和/
的含义与HTTP路径的含义相同。
依赖项中./
的存在告诉RequireJS从当前目录开始搜索。如果您想要的是使用您知道的模块与需要它的目录相同,那么它非常有用。假设moduleA需要moduleB,并且两者都在同一目录中,那么moduleA只需要"./moduleB"
。这样做的一个好处是您不必担心模块的存储位置。如果你移动它们但它们总是在同一目录中,那么moduleA将始终找到moduleB。
另一件事是,如果您require("moduleX")
并且有多个名为moduleX的模块可用,您将获得哪个模块?相对路径阐明了您将获得哪一个。
你问你如何摆脱./
首先,我会问你真的想要摆脱它吗?在我给出的情况中,两个模块位于同一目录中,并且这种关系意味着稳定,那么摆脱./
没有意义。它实际上可以帮助人们阅读代码。如果您需要的是jQuery,它恰好在某个时刻位于与另一个模块相同的目录中,但可以合法地安装在其他地方,并且您可以想象它对于给定的应用程序是唯一的,然后将它放在全球知名的位置是有道理的。为此,您可以在requirejs配置中使用paths
,例如:
paths: {
'jquery': 'external/jquery-1.9.1'
}
这是实际应用程序的实际代码部分。无论哪个模块都想要jquery,它只会发出require("jquery")
。它不必担心jquery是否相对于自身而言。您可以为任何您喜欢的模块指定这样的路径,而不仅仅是jQuery。如果将来jQuery移动到其他位置或者您想要从CDN提供它,那么上面代码段中的此映射将被编辑,但require("jquery")
仍然有效。
答案 1 :(得分:1)
在代码的上下文中,它意味着将cart定义在与当前执行脚本相同的目录中。
另一种方法是使用绝对路径:
/var/www/site/cart
为:
define(["/var/www/site/cart", "/var/www/site/inventory"], function(cart, inventory) {...}
答案 2 :(得分:1)
define(["./cart", "./inventory"], function(cart, inventory) {...}
它搜索文件系统
中当前目录中的特定文件define(["cart", "inventory"], function(cart, inventory) {...}
它搜索文件系统
中根目录中的特定文件答案 3 :(得分:0)
./
是指当前目录,以使模块当前与脚本位于同一目录中。否./
是指节点路径,其中包含本机和已安装的模块(例如:net
,fs
,并且任何使用安装通过npm
)使用绝对路径可以获得文件系统中的任何位置(/i/like/node/js/modules.js
)
答案 4 :(得分:0)
' /'指的是根目录,
' ./'指的是当前目录
define(["./cart", "./inventory"]
:这将引用正在执行脚本的当前目录中的cart。
答案 5 :(得分:0)
./ 表示您将保留在同一目录中。