我正在使用CasperJS检查某个站点并将JSON数据写入文件。文件应写入public/data
文件夹。但是当我试图在我的项目目录(例如我的主目录)之外调用casperjs
时,它会直接在~/public/data
中写入文件,而不是在我的项目目录中。
我该如何解决这个问题?我还没有找到如何获取__dirname或__filename。
答案 0 :(得分:20)
我有这个问题;需要相对于脚本所在位置的路径中的文件。 通过一点点(阅读:大量)修补,我能够产生以下内容:
// Since Casper has control, the invoked script is deep in the argument stack
var currentFile = require('system').args[3];
var curFilePath = fs.absolute(currentFile).split('/');
// I only bother to change the directory if we weren't already there when invoking casperjs
if (curFilePath.length > 1) {
curFilePath.pop(); // PhantomJS does not have an equivalent path.baseName()-like method
fs.changeWorkingDirectory(curFilePath.join('/'));
}
这允许我使用相对路径来fs.read()
和spawn
个文件。也许是require()
,我只是没有一个模块来测试它。
希望这有用!
答案 1 :(得分:2)
您可以使用phantomJS的FileSystem模块。
因为CasperJS是基于PhantomJS构建的,所以您可以在CasperJS脚本中包含Phantom的模块。
尝试:
//require a reference to the fs module
var fs = require('fs');
...
//changes the current workingDirectory to the specified path.
fs.changeWorkingDirectory('/your/path')
有关文件系统模块here
的完整文档答案 2 :(得分:2)
我的解决方案:
var system = require('system')
var absoluteFilePath = system.args[4];
var absoluteFileDir = absoluteFilePath.replace('{your_file_name}', '');
检查系统参数:
console.log(system.args)
答案 3 :(得分:1)
您需要的只是使用phantomjs fs:
基本上,您可以将项目设置为完整路径:
var fs = require('fs');
console.log(fs.workingDirectory);
// output "F:/path/to/your/project"
答案 4 :(得分:0)
您使用4个参数为特定的casperjs调用提供答案。 一般的解决方案是将最后一个参数作为absoluteFilePath
var system = require('system')
var absoluteFilePath = system.args[system.args.length-1];
var absoluteFileDir = absoluteFilePath.replace('{your_file_name}', '');