Подтвердить что ты не робот

Как получить в настоящее время исполняемый каталог файлов в CasperJS

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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 здесь

Ответ 3

Мое решение:

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

Чтобы проверить системные аргументы:

console.log(system.args)

Ответ 4

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

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

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

Ответ 5

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

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