Метеор приложение не может найти "xhr-sync-worker.js"?

Я пытаюсь запустить пример deck.gl внутри метеорного приложения. Но я сталкиваюсь с этой ошибкой.

modules-runtime.js?hash=8587d18…:231 Uncaught Error: Cannot find module './xhr-sync-worker.js'
    at makeMissingError (modules-runtime.js?hash=8587d18…:231)
    at Function.require.resolve (modules-runtime.js?hash=8587d18…:263)
    at xmlhttprequest.js (xml.js:30)
    at fileEvaluate (modules-runtime.js?hash=8587d18…:343)
    at require (modules-runtime.js?hash=8587d18…:238)
    at Window.js (xml.js:30)
    at fileEvaluate (modules-runtime.js?hash=8587d18…:343)
    at require (modules-runtime.js?hash=8587d18…:238)
    at api.js (xml.js:30)
    at fileEvaluate (modules-runtime.js?hash=8587d18…:343)

Однако упомянутый модуль js присутствует в метеорном приложении node_modules папка.

/caseview/node_modules/jsdom/lib/jsdom/living/xhr-sync-worker.js

Как я могу заставить свое приложение видеть это? Обратите внимание, что я не импортирую его непосредственно в свой код, как видно из приведенной выше трассировки стека. Возможно, это ошибка метеора.

4 ответа

Поздний ответ, но я столкнулся с той же проблемой в приложении метеора/реакции, пытаясь импортировать JSDOM в компонент. После нескольких долгих часов есть способ. Шаг 1: библиотека JSOM использует относительный путь для требования:

      node_modules/jsdom/lib/jsdom/living/xhr/XMLHttpRequest-impl.js:31
const syncWorkerFile = require.resolve ? require.resolve("./xhr-sync-worker.js") : null;

Meteor создает весь ваш код, поэтому относительный путь больше не подходит. Решение: замените эту строку абсолютным путем:

      const syncWorkerFile = "${require.resolve('jsdom/lib/jsdom/living/xhr/xhr-sync-worker.js')}";

Теперь ваше приложение работает, но если вы установите метеор npm, вам придется повторить эту модификацию.

Шаг 2: создайте и используйте свой собственный пакет в node_modules/jsdom, создайте пакет пряжи для создания tar.gz с вашей модификацией (jsdom использует пряжу, поэтому вы не можете использовать npm)

переместите свой архив: cp ./jsdom-v18.1.1.tgz ../../dependencies/

и замените jsdom своей свежей сборкой: meteor npm install dependencies/jsdom-v18.1.1.tgz

Я только столкнулся с этой проблемой и смог решить мою проблему, поэтому я решил включить ее сюда для потомков.

Я добавил JSDOM через NPM и по неосторожности потребовал jsdom как на стороне клиента, так и на стороне сервера.

Включив требование в условие Meteor.isServer, я решил свою проблему.

if (Meteor.isServer) {
  const jsdom = require("jsdom");
}

Поэтому, если вы столкнулись с этой проблемой, дважды проверьте, что вы не пытаетесь запустить код на клиенте непреднамеренно.

У меня были такие проблемы в прошлом в Метеоре, где говорится, что какой-то файл не найден в node_modules, Я не знаю точную причину, почему это происходит, но да, это похоже на какую-то ошибку Meteor.

Итак, как я это исправил, удалив node_modules папка, а затем делать meteor npm install снова. Попробуйте, и я думаю, что это работает и в вашем случае. Дайте мне знать, если это не поможет.

У меня также была такая же проблема, и она, казалось, исчезла, когда я переименовал файл, в котором требовался JSDOM, из index.js в index.es6. Я считаю, что это связано с ...require(); функция.

Другие вопросы по тегам