Javascript 在audiosprite中加载错误-未找到模块:';child#u过程';

Javascript 在audiosprite中加载错误-未找到模块:';child#u过程';,javascript,node.js,npm,webpack,ecmascript-6,Javascript,Node.js,Npm,Webpack,Ecmascript 6,我正在尝试在Web包服务器上运行的React应用程序中加载,出现以下错误: 在中找不到模块:“子进程” C:\Users\BenLi\Desktop\development 项目\应用程序\节点\模块\音频精灵 不知道这可能是什么,也不知道为什么会发生在这个模块上,因为很明显,Webpack不应该抛出child\u进程错误 我将它包括在我的应用程序中,如下所示: import audiosprite from 'audiosprite'; 从文件中的此处返回时出错: function spaw

我正在尝试在Web包服务器上运行的React应用程序中加载,出现以下错误:

在中找不到模块:“子进程” C:\Users\BenLi\Desktop\development 项目\应用程序\节点\模块\音频精灵

不知道这可能是什么,也不知道为什么会发生在这个模块上,因为很明显,Webpack不应该抛出
child\u进程
错误

我将它包括在我的应用程序中,如下所示:

import audiosprite from 'audiosprite';
从文件中的此处返回时出错:

function spawn(name, opt) {
  opts.logger.debug('Spawn', { cmd: [name].concat(opt).join(' ') })
  return require('child_process').spawn(name, opt)
}

如何修复此错误?

我想您必须让NPM安装依赖项 只是

TL;DR

除非您(可能)切换到(需要自己测试)提供模块,否则没有办法解决此问题。由于浏览器无论如何都无法访问文件系统或子进程,因此在此用例中不能使用模块
audiosprite
。浏览器不能做它不能做的事情

解释

这是因为网页包。默认情况下,Webpack设计用于编译在web浏览器环境中运行的代码。它存在的全部原因是将所有内容捆绑起来,使其对浏览器友好(因此得名为“web包”)

Node提供了一些内置模块,如
子进程
路径
操作系统
fs
,等等,这些模块只存在于节点环境中。当出现Webpack并尝试为浏览器捆绑代码时,浏览器无法访问这些模块。因此,当模块(如
audiosprite
使用
child\u process
)时,默认情况下,Webpack会将它们捆绑到web上,您将无法再访问这些模块。这解释了错误报告“未找到模块”的原因

“解决方案”

“修复”是指定要编译的网页包配置,以便在类似节点的环境中使用,您可以访问这些内置模块。这样,Webpack就不会弄乱内置模块,并且可以使用
child\u进程
。您可以通过指定
target
选项来完成此操作。发件人:

目标
  • “web”
    编译以在类似浏览器的环境中使用(默认)
  • “node”
    编译以在类似node.js的环境中使用(使用
    require
    加载块)
(为简洁起见,对文件进行了裁剪)

但是有一个后果。由于您将目标设置为节点环境,
require
在使用浏览器时将不起作用,因为浏览器环境中没有
require

您可以做的是保持目标环境不变(默认情况下为“web”),并尝试模拟模块以满足您的需要。与:

节点
包括各种节点填充的多边形填充或模拟:

  • true
    “mock”
    “empty”
    false
并将其应用于网页包配置文件:

node: {
    fs: "mock"
}
但这会告诉你:

错误:node.js核心模块“fs”没有可用的浏览器版本

所以这只是出于设计。您无能为力,因为浏览器环境的捆绑将不可避免地禁止您访问文件系统,因为它无法访问。不能为模块提供浏览器模拟,该模块在浏览器中执行不可能的操作。这同样适用于
子进程
和其他进程


编辑:我一直在寻找一些替代方案,可能有效,也可能无效。它们确实提供了一个模块来替代节点的
fs
。我还没有对此进行测试,所以我不确定它是否有用,但它看起来比Webpack现在所做的要好。

我认为您可以通过某种方式将其包含到浏览器中,而不是让依赖项存在于nodejs中。也许这个问题有点相关:如果我把它包括在浏览器中,它仍然有相同的问题更新我的问题,错误在哪里,如果你知道用其他东西替换行的方法,谢谢你的回答。我已经在webpack配置文件的末尾添加了目标:“node”,但它抛出了一个错误:ReferenceError:require未定义。知道是什么原因吗?请告诉我,因为我对这一切都很陌生。我在webpack配置文件中添加了排除行,如下所示:模块:{loaders:[{exclude:/node\u modules/,}]},但它仍然抛出相同的错误。。。不确定我是否做对了?你可以在这里看到:我把它和我的其他加载器一起加进去了。注意:完全确定你说的“像我用include做的那样”是什么意思?这里还有完整的网页文件,如果这有助于你进一步调试的话?好的,现在它在audiosprite.js中给了我一个错误,说在C:\Users\BenLi\Desktop\development projects\music app\node\u modules\audiosprite中找不到模块:“fs”。这是一个非常棘手的问题(很难调试代码,您看不到)。谢谢你拿出赏金并选择了正确的答案。
node: {
    fs: "mock"
}