13

我正在使用 CasperJS 检查一些站点并将 JSON 数据写入文件。文件应写入public/data文件夹。但是当我试图在casperjs 我的项目目录(例如我的主目录)之外调用时,它直接将文件写入~/public/data,而不是我的项目目录。

我应该如何解决这个问题?我还没有找到如何获取 __dirname 或 __filename。

4

5 回答 5

20

我有这个确切的问题;需要相对于脚本所在路径的文件。通过一点(阅读:很多)修补,我能够产生以下内容:

// Since Casper has control, the invoked script is deep in the argument stack
const args = require('system').args;
var currentFile = args[args.length - 1];
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()同样,我只是没有一个模块来测试它。

希望这有帮助!

于 2013-07-06T05:27:27.903 回答
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')

关于文件系统模块的完整文档在这里

于 2013-05-28T13:36:49.173 回答
2

我的解决方案:

var system = require('system')
var absoluteFilePath = system.args[4];
var absoluteFileDir = absoluteFilePath.replace('{your_file_name}', '');

检查系统参数:

console.log(system.args)
于 2014-09-02T03:02:59.657 回答
1

您只需要使用phantomjs fs

基本上你可以将你的项目设置为完整路径:

var fs = require('fs');
console.log(fs.workingDirectory);
// output "F:/path/to/your/project"
于 2017-01-22T23:13:55.497 回答
0

您使用 4 个参数给出特定 casperjs 调用的答案。一般的解决方案是将最后一个参数作为 absoluteFilePath

var system = require('system')
var absoluteFilePath = system.args[system.args.length-1];
var absoluteFileDir = absoluteFilePath.replace('{your_file_name}', '');
于 2015-10-29T16:52:56.213 回答