2013-10-29 102 views
1

我一直在读通过RequireJS“./”路径规范的含义是什么?

我不明白

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

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

什么区别的 “.​​/” 让之间的区别?我们还有什么替代方法可以使用不带“./”的依赖路径?

+2

'。/'是文件系统上的当前目录。 –

回答

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")仍然有效。

0

./是指当前目录,以获取当前模块与脚本相同的目录。没有./指节点路径,在本地和安装的模块去(如:netfs,以及任何使用通过npm安装)使用绝对路径可以在文件系统(/i/like/node/js/modules.js

1

在你的代码的情况下取得任何进展,这意味着将购物车定义在与当前执行脚本相同的目录中。

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

/var/www/site/cart

为:

define(["/var/www/site/cart", "/var/www/site/inventory"], function(cart, inventory) {...} 
0

'/' 指的根目录和

'./'指当前目录

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

1

Wikipedia

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

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

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

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

0

./意味着你留在同一个目录中。