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 包 - TinyTest 的替代品?

未找到流星验证方法

在 Meteor 中按与当前用户的距离对用户进行反应性排序?

2013 Meteor NPM 包

> 'meteor run android' 运行应用程序并启动 android 模拟器,但我无法在模拟器中找到或运行应用程序