2013-05-27 1 views
13

Я использую CasperJS для проверки некоторых сайтов и записи данных JSON в файл. Файл должен быть записан в папку public/data. Но когда я пытаюсь позвонить casperjs за пределами моего каталога проекта (например, моего домашнего каталога), он записывает файл непосредственно в ~/public/data, а не в мою директорию проекта.Как получить в настоящее время исполняемый каталог файлов в CasperJS

Как это решить? Я не нашел, как получить __dirname или __filename.

+0

Do у вас есть пример кода, с которым вы работали? – imjared

+0

Здравствуйте, InviS. Достаточно ли этого ответа? Могли бы вы так любезны отметить ответ на это? Спасибо! – Morgon

ответ

2

Вы можете использовать модуль FileSystem phantomJS.

Поскольку CasperJS был построен поверх PhantomJS, вы можете включать модули Phantom в свои скрипты CasperJS.

Try:

//require a reference to the fs module 
var fs = require('fs'); 
... 
//changes the current workingDirectory to the specified path. 
fs.changeWorkingDirectory('/your/path') 

Полная документация о модуле FileSystem here

19

Я имел этот точный вопрос; требуя файл в пути относительно того, где жил сценарий. С немного (читай: много) лужения, я был в состоянии произвести следующие действия:

// 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(), а у меня просто нет модуля для тестирования.

Надеюсь, это полезно!

+0

Не знал о 'require ('system'). Args' – Deviljho

+2

Для этого явно требуется' var fs = require ('fs'); ' –

2

Мое решение:

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

Для проверки системы арг:

console.log(system.args) 
0

Вы дать ответ для конкретного casperjs коллировать с 4 аргументами. Общее решение взять последний аргумент absoluteFilePath

var system = require('system') 
var absoluteFilePath = system.args[system.args.length-1]; 
var absoluteFileDir = absoluteFilePath.replace('{your_file_name}', ''); 
+0

В моей настройке я не вижу, что absoluteFilePath является последним индексом в системе .args. Напротив, мне кажется, 4-й элемент –

1

Все, что вам нужно использовать phantomjs fs:

В принципе вы можете установить на свой проект, как полный путь:

var fs = require('fs'); 
console.log(fs.workingDirectory); 
// output "F:/path/to/your/project"