Meteor 应用程序没有找到“xhr-sync-worker.js”?
Posted
技术标签:
【中文标题】Meteor 应用程序没有找到“xhr-sync-worker.js”?【英文标题】:Meteor app not finding 'xhr-sync-worker.js'? 【发布时间】:2017-11-05 09:16:18 【问题描述】:我正在尝试在一个流星应用程序中运行一个 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
如何让我的应用看到它?请注意,我没有直接在我的代码中导入它,从上面的堆栈跟踪中可以看出。也许这是一个流星虫。
【问题讨论】:
您的应用中的相关代码是什么样的?您是否尝试直接在代码中导入xhr-sync-worker
?
不,我没有直接导入它。它是从流星堆栈中的其他包导入的
需要更多信息,请使用以下代码编辑您的帖子:使用此库的代码 sn-p。
我再说一遍,我的代码中没有使用 Lib。堆栈跟踪显示它是从哪里调用的。这些都是来自流星框架的库或在构建过程中被它捆绑的库。
您找到解决此问题的方法了吗?我发现运行流星测试时总是会发生这种情况。
【参考方案1】:
回复晚了,但我在一个流星/反应应用程序中遇到了同样的问题,试图在一个组件中导入 JSDOM。几个小时后,有一种方法。 第 1 步:JSOM 库对 require 使用相对路径:
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 中做一个 yarn pack 来生成一个 tar.gz 和你的修改(jsdom 使用 yarn 所以你不能使用 npm)
移动你的存档:cp ./jsdom-v18.1.1.tgz ../../dependencies/
并用你新构建的替换 jsdom:meteor npm install dependencies/jsdom-v18.1.1.tgz
【讨论】:
【参考方案2】:我刚刚遇到了这个问题并且能够解决我的问题,所以我想我会把它包括在这里以供后代使用。
我已经通过 NPM 添加了 JSDOM,并且无意中在我的客户端和服务器端代码中都需要 jsdom。
通过将 require 包装在 Meteor.isServer 条件中,我解决了我的问题。
if (Meteor.isServer)
const jsdom = require("jsdom");
因此,如果您遇到此问题,请仔细检查您是否无意在客户端上运行代码。
【讨论】:
为我工作,唯一需要注意的是我一直在对所有内容使用import
语法,因此为了使其正常工作,使用此创建 jsdom-setup.js
然后在顶部完成 import './jsdom-setup.js'
我的tests/main.js
【参考方案3】:
我也遇到了同样的问题,当我将需要 JSDOM 的文件从 index.js 重命名为 index.es6 时,它似乎消失了。我认为这与 ...require(); 函数有关。
【讨论】:
【参考方案4】:我过去在 Meteor 中遇到过这些问题,它说在 node_modules
中找不到某些文件。我不知道发生这种情况的确切原因,但它看起来像一些 Meteor 错误。
所以,我解决此问题的方法是删除 node_modules
文件夹,然后再次执行 meteor npm install
。试试这个,我认为这也适用于你的情况。如果没有帮助,请告诉我。
【讨论】:
以上是关于Meteor 应用程序没有找到“xhr-sync-worker.js”?的主要内容,如果未能解决你的问题,请参考以下文章
在 Meteor 中按与当前用户的距离对用户进行反应性排序?
> 'meteor run android' 运行应用程序并启动 android 模拟器,但我无法在模拟器中找到或运行应用程序