我一直在读通过RequireJS“./”路径规范的含义是什么?
我不明白
define(["./cart", "./inventory"], function(cart, inventory) {...}
和
define(["cart", "inventory"], function(cart, inventory) {...}
什么区别的 “./” 让之间的区别?我们还有什么替代方法可以使用不带“./”的依赖路径?
我一直在读通过RequireJS“./”路径规范的含义是什么?
我不明白
define(["./cart", "./inventory"], function(cart, inventory) {...}
和
define(["cart", "inventory"], function(cart, inventory) {...}
什么区别的 “./” 让之间的区别?我们还有什么替代方法可以使用不带“./”的依赖路径?
一般来说,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")
仍然有效。
./
是指当前目录,以获取当前模块与脚本相同的目录。没有./
指节点路径,在本地和安装的模块去(如:net
,fs
,以及任何使用通过npm
安装)使用绝对路径可以在文件系统(/i/like/node/js/modules.js
)
在你的代码的情况下取得任何进展,这意味着将购物车定义在与当前执行脚本相同的目录中。
另一种方法是使用绝对路径:
/var/www/site/cart
为:
define(["/var/www/site/cart", "/var/www/site/inventory"], function(cart, inventory) {...}
'/' 指的根目录和
'./'指当前目录
define(["./cart", "./inventory"]
:这将引用当前目录中正在执行脚本的cart。
define(["./cart", "./inventory"], function(cart, inventory) {...}
它搜索特定的文件在当前目录中的文件系统
define(["cart", "inventory"], function(cart, inventory) {...}
它在搜索根目录下的特定文件在文件系统
./意味着你留在同一个目录中。
'。/'是文件系统上的当前目录。 –