4

我正在尝试在流星应用程序中运行一个 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

4 回答 4

1

我刚刚遇到了这个问题并且能够解决我的问题,所以我想我会把它包括在这里以供后代使用。

我已经通过 NPM 添加了 JSDOM,并且无意中在我的客户端和服务器端代码上都需要 jsdom。

通过将 require 包装在 Meteor.isServer 条件中,我解决了我的问题。

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

因此,如果您遇到此问题,请仔细检查您是否无意在客户端上运行代码。

于 2018-05-23T17:30:23.787 回答
0

我也遇到了同样的问题,当我将需要 JSDOM 的文件从index.js重命名为index.es6时,它似乎消失了。我相信这与...require(); 功能。

于 2018-02-01T12:08:24.847 回答
0

我过去在 Meteor 中遇到过这些问题,它说在node_modules. 我不知道发生这种情况的确切原因,但它看起来像一些 Meteor 错误。

所以,我解决这个问题的方法是删除node_modules文件夹然后再做meteor npm install一次。试试这个,我认为这也适用于你的情况。让我知道它是否没有帮助。

于 2017-06-04T17:06:27.527 回答
0

回复晚了,但我在流星/反应应用程序中遇到了同样的问题,试图在组件中导入 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

于 2021-11-30T15:13:44.783 回答