2013-10-29 155 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

./意味着你留在同一個目錄中。