我一直在阅读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 就可以 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")
仍然有效。
在您的代码上下文中,这意味着在与当前执行脚本相同的目录中定义购物车。
另一种方法是使用绝对路径:
/var/www/site/cart
作为:
define(["/var/www/site/cart", "/var/www/site/inventory"], function(cart, inventory) {...}
define(["./cart", "./inventory"], function(cart, inventory) {...}
它在文件系统的当前目录中搜索特定文件
define(["cart", "inventory"], function(cart, inventory) {...}
它在文件系统的根目录中搜索特定文件
./
is 引用当前目录,获取当前与脚本在同一目录下的模块。No./
指本机和已安装模块所在的节点路径(例如:net
、、fs
以及任何使用 install via的内容npm
)使用绝对路径可以到达文件系统中的任何位置(/i/like/node/js/modules.js
)
' /' 指根目录和
' ./' 指的是当前目录
define(["./cart", "./inventory"]
:这将在当前执行脚本的目录中引用购物车。
./表示您将留在同一目录中。