2017-01-21 27 views
1

這是一個死了的簡單問題,毫無疑問是一個重複的問題,但我搜索了四周,還沒有找到有效的答案。 (另外我來自的Flex /的ActionScript世界難民和我仍然習慣這個世界的Javascript的奇風異俗)哪個上下文是相對路徑?

我測試了Jimp圖像lib和使用例如服從跳(如下圖)。我在「js」目錄下創建了一個新文件「jimpMethods.js」,並將Jimp示例封裝在「testJimp」函數中。我想引用我項目的「資產」目錄中的「house.jpg」。我在我的「index.html」腳本標記中引用「jimpMethods.js」,並在窗口的「onLoad」事件中調用「testJimp」。

我的問題:我如何參考資產文件夾中的圖像文件?腳本本身位於「JS」文件夾中,但它在包含目錄中的「index.html」中執行。

我想:

./assets/house.jpg // this would be relative to the "index.html" 
../assets/house.jpg // this would be relative to the "JS" directory 

但是都沒有成功。我嘗試多種變化,最終使出

__dirname + '/assets/house.jpg' 

該做的工作(這是在電子和__dirname是一個全局變量引用的應用程序文件夾)。

我想了解我在之前的嘗試中缺少的東西:給出我描述的目錄結構,我的圖像的正確相對路徑是什麼?

enter image description here


我在「JimpMethods.js

var Jimp = require("jimp"); 

function testJimp() { 
    var thePath = __dirname + '/assets/house.jpg' 

    Jimp.read(thePath, function (err, mmyImage) { 
     if (err) throw err; 
     mmyImage.resize(256, 256)   // resize 
      .quality(60)     // set JPEG quality 
      .greyscale()     // set greyscale 
      .write(__dirname + '/assets/house-small-bw.jpg'); // save 
    }); 
} 

原例如服從跳碼

var Jimp = require("jimp"); 

// open a file called "lenna.png" 
Jimp.read("lenna.png", function (err, lenna) { 
    if (err) throw err; 
    lenna.resize(256, 256)   // resize 
     .quality(60)     // set JPEG quality 
     .greyscale()     // set greyscale 
     .write("lena-small-bw.jpg"); // save 
}); 
+1

backpath'../'永遠不會使用,因爲相對路徑取決於訪問頁面的文件夾級別。你可以像沒有點一樣使用'/assets/house.jpg'。但__dirname +'/assets/house.jpg'是一個很好的解決方案。 –

回答

1

嘗試

console.log(__dirname) 

你會看到,它不是index.html,而是以main.js開頭。你必須從你的程序的服務器或主腳本的路徑開始。在你的情況下,它是main.js。所以下面應該工作:

./app/assets/house.jpg 

但使用__dirname是一個很好的解決方案,更是它會使用path.join。

+0

謝謝,我甚至沒有想到'main.js'被涉及(是的,'./app/etc'確實有效)。我同意使用完整路徑是更可靠和可維護的方法 - 我只是試圖在我的理解中修補這些令人沮喪的差距(更像裂隙)。 –