TLDR; Мой вопрос: есть ли способ сделать браузеру НЕ переопределять require
с его собственной реализацией, и вместо этого он использует другое имя метода (например, browserifyRequire
) для всех своих внутренних требований. Для того, чтобы выяснить, почему мне нужно сделать это, пожалуйста, читайте дальше ...Код привязки для CasperJS + SlimerJS с использованием Browserify?
сценарию
Я пытаюсь написать несколько автоматизированных тестов с использованием CasperJS и запуская их в SlimerJS - в отличие от PhantomJS по умолчанию (хотя для всех, кого я знаю, у меня возникли бы следующие проблемы с PhantomJS).
I действительно хочу выяснить, как их записать в CoffeeScript. Как выясняется, CasperJS или SlimerJS сегодня не очень хорошо работают с CoffeeScript. Рекомендация docs заключается в том, чтобы скомпилировать JS перед запуском casper. Хорошо ... не супер удобно, но я могу справиться с этим. На самом деле, я также выясняю, что путь require
разрешает пути в этих инструментах не так прост, как в узле, поэтому сборка впереди работы также должна помочь в этом.
Но теперь я столкнулся с новым набором проблем при попытке запустить связанный код. Я использую Browserify для этого.
Проблема
В моем тестовом коде, мне нужно require('casper')
. Стандартная практика в мире CasperJS. Поэтому мне пришлось сказать браузеру НЕ, чтобы связать CasperJS, поставив "browser": { "casper": false }
в мой package.json
. Пока нет проблем. Но проблема следующая:
Browserify переопределяет встроенную функцию require
, предоставляя собственную реализацию require
, которая делает все, что делает работу браузера. CasperJS в порядке с ним, пока не встретит директиву require('casper')
. Это тот самый случай, когда CasperJS должен делать require
'ing, а не браунировать. И это не удается.
неполное Решение
Я совершенно уверен, что CasperJS просто не может справиться с тем, что Browserify переопределяет require
, потому что CasperJS реализует свой собственный путь require
Инг. Чтобы проверить эту гипотезу, я вручную отредактировал результирующий пакет, переименовав каждое событие require
в browserifyRequire
- включая реализацию браузера require
. Единственный require
, который я оставил без изменений, состоял в том, что звонил require('casper')
, потому что мне нужен CasperJS, чтобы обрабатывать require
ing. И действительно, это делало работу так, как ожидалось.
Вопрос
Опять же, есть способ сделать browserify использовать другое имя для своего внутреннего require
? Я полагаю, что я могу написать скрипт, чтобы сделать это изменение после связывания, но я бы скорее понял, как это сделать через config.
Альтернативный Вопрос
Может быть, вместо того, чтобы Browserify есть другое решение для пакетирования и работает CoffeeScript внутри CasperJS? Я еще не нашел ...