2017-01-21 26 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'确实有效)。我同意使用完整路径是更可靠和可维护的方法 - 我只是试图在我的理解中修补这些令人沮丧的差距(更像裂隙)。 –