Метеор приложение не может найти "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(); функция.