jsdom.env: локальный скрипт jquery не работает - PullRequest
2 голосов
/ 13 декабря 2011
  jsdom.env({
              html: "<html><body></body></html>",
              scripts: [
                //'http://code.jquery.com/jquery-1.5.min.js'
                  'http://server.local:3000/jquery/jquery.min.js'

              ]
            }, function (err, window) {

это не работает скрипт '' 1002 * (доступен через браузер) jquery.min.js является копией jquery-1.5.min.js

если скрипт 'http://code.jquery.com/jquery-1.5.min.js' - все работает.

Что не так?

Ответы [ 3 ]

6 голосов
/ 16 января 2012

Это не является прямым ответом на ваш вопрос, но, возможно, другие приходят к этому вопросу, как я.

Вы можете указать локальные файлы в записи сценариев.Просто поместите туда абсолютный путь или добавьте запись documentRoot и используйте относительный путь.Например,

jsdom.env({
        html: "<html><body></body></html>",
        documentRoot: __dirname + '/lib',
        scripts: [
            'jquery/jquery.min.js'
        ]
    }, function (err, window) {
    }
);
0 голосов
/ 17 февраля 2019

Вопрос состоит в том, пытается ли jsdom извлечь ресурс, идентифицированный по URL-адресу http://server.local:3000/jquery/jquery.min.js', а затем выполнить (добавить функции javascript в извлеченном файле (jquery.min.js) в контекст объекта окна jsdom.DOM-объект. По сути, мы пытаемся сделать то, что делает веб-браузер, когда он читает и анализирует тег и моделирует загрузку библиотеки jQuery в объект «window» DOM jsdom.

Обходной путь извлекаетБиблиотека jquery.min.js из файловых систем, использующая модуль fs Node, но не как запрос HTTP FETCH. Как ясно показывает обходной код, библиотека jQuery читается как файл в массив, а затем массив передается функции jsdomнапрямую, а не как объект окна DOM jsdom.

В документации по jsdom на GitHub приведен фрагмент кода и объяснение того, как выполнить запрос GET для глагола HTTP из URL-адреса в созданный объект окна DOM.модулем jsdom (см. ниже). Он следует той же схеме, что и запрос AJAX, который ячто вы ожидаете.Да, обходной путь получает библиотеку jQuery из файловой системы, в которой находятся серверные файлы.Тем не менее, это на самом деле не «обойти» проблему в jsdom, но решает немного другой случай использования, когда URL заменяется ссылкой на файловую систему (имя файла / каталог) на файл jQuery.

const dom = новая JSDOM (``, {url: "https://example.org/", реферер:" https://example.com/", contentType: "text / html", includeNodeLocations: true, storageQuota: 10000000});

0 голосов
/ 20 июля 2015
function domify(cb){
    var file= __dirname + '/public/jquery.js';
    var jquery = fs.readFileSync(file).toString();
    jsdom.env({
        html: "<html><body></body></html>",
        src: [jquery],
        done: function (err, window) {
            cb(err,window);
        }
    });
}

это сработало для меня

...