我一直在讀通過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) {...}
它在搜索根目錄下的特定文件在文件系統
./意味着你留在同一個目錄中。
'。/'是文件系統上的當前目錄。 –