Öz
Node.js'de, __dirnameher zaman yürütülmekte olan komut dosyasının bulunduğu dizindir (buna bakın ). Eğer __dirnameiçine yazdıysanız /d1/d2/myscript.js, değer olurdu /d1/d2.
Buna karşılık, ve gibi kütüphaneleri kullandığınızda ., nodekomutu terminal pencerenizde (örneğin çalışma dizininiz) çalıştırdığınız dizini verir . Teknik olarak, çalışma dizininiz olarak başlar, ancak kullanılarak değiştirilebilir .pathfsprocess.chdir()
Bunun istisnası, .ile birlikte kullanmanızdır require(). İçindeki yol requireher zaman çağrıyı içeren dosyaya göredir require.
Örneğin...
Diyelim ki dizin yapınız
/dir1
/dir2
pathtest.js
ve pathtest.jsiçerir
var path = require("path");
console.log(". = %s", path.resolve("."));
console.log("__dirname = %s", path.resolve(__dirname));
ve sende yap
cd /dir1/dir2
node pathtest.js
anladın
. = /dir1/dir2
__dirname = /dir1/dir2
Çalışma dizininiz /dir1/dir2böyledir ve çözüm budur .. Yana pathtest.jsbulunan /dir1/dir2şey bu yıllardan __dirnamede giderir için.
Ancak, komut dosyasını /dir1
cd /dir1
node dir2/pathtest.js
anladın
. = /dir1
__dirname = /dir1/dir2
Bu durumda, çalışma dizini oldu /dir1en neyi böylece .karar, ama __dirnameyine de giderir için /dir1/dir2.
.İçinde kullanma require...
İçeride ise dir2/pathtest.jsbir var requireiçine çağrıyı içinde bir dosya eklemek dir1, olur hep yapmak
require('../thefile')
çünkü içindeki yol requireher zaman aradığınız dosyaya göredir. Çalışma dizininizle hiçbir ilgisi yoktur.