【问题标题】:Can't Resolve "child_process" in module xmlhttprequest无法解析模块 xmlhttprequest 中的“child_process”
【发布时间】:2019-04-24 14:17:30
【问题描述】:

我正在处理加载 JSON 文件的 DataConnector 类。本课程之外的所有内容在我的应用程序中都运行良好,所以我认为问题不会出现在其他任何地方。

var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;

//#File: DataConnector.js
var DataConnector = {};


DataConnector.LoadJSON = (function(file,callback) {   

    var xobj = new XMLHttpRequest();
    console.log(xobj);
    xobj.open('GET', file, true); 
    xobj.overrideMimeType = "application/json";

    xobj.onreadystatechange = function () {
          if (xobj.readyState == 4 && xobj.status == "200") {

                callback(xobj.responseText);
          }
    };
    xobj.send(null);  
})

DataConnector.getMessage = function(){
    return 'Hello DataConnector';
}



module.exports = DataConnector;

main.js

//#File: QuestionJS.js
//var $ = require('jquery');
Answer = require('./Answer');
Question = require('./Question');
ThemeGenerator = require('./ThemeGenerator');
DataConnector = require('./DataConnector')

//console.log(DataConnector.getMessage());

如果我将 DataConnector 注释掉,webpack 可以完美地捆绑我的应用程序。我今天早些时候也在另一台 PC 上进行了这项工作,实际上每次都运行良好。

我用过 npm i -g xmlhttprequest npm i xmlhttprequest npm i xmlhttprequest --save

xmlhttprequest 在我的项目文件夹的 node_modules 文件夹中有文件,我严格按照自述文件进行操作。

老实说,我从来没有这么困惑过,特别是因为这个错误甚至从未出现在其他系统上,尽管它们都是安装了保存软件的 Windows 10 系统。

感谢大家的帮助!

【问题讨论】:

标签: javascript node.js xmlhttprequest


【解决方案1】:

xmlhttprequest 包适用于 服务器端 JavaScript。 child_process 包内置在 NodeJS 中。它不是 NPM 包,因此不能下载或包含在 NodeJS 之外的任何应用程序中。它是一个专门为处理 NodeJS 内部功能而设计的包。

如果您尝试在前端使用 xmlhttprequest 包,它就会出现。由于 xmlhttprequest 包仅适用于 NodeJS,因此您收到 child_process 不存在的错误,因为它在前端浏览器中不存在。如果是这种情况,您可能会很高兴知道XMLHttpRequest 是内置在浏览器中的。 NodeJS 包存在的原因是为了模仿浏览器的固有功能。您也许可以将包作为一个整体删除并引用XMLHttpRequest 类而不会出错。

如果您正在编写同时支持后端和前端的代码,您可能会得到如下结果:

if (typeof XMLHttpRequest === 'undefined') {
  global.XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest;
}

如果您使用 Webpack 捆绑后端应用程序,您可能需要将其配置为以node 而不是浏览器为目标。

【讨论】:

  • 我想可能是我做错了,我正在尝试构建一个前端组件,这是一个我试图模块化的复杂组件,以便在构建它时可以利用 OOP .我知道浏览器有 XMLHTTPRequest,但我试图将这个文件捆绑到一个文件中,以便我可以将它作为一个易于设置的单个组件分发。还有另一种在 JavaScript 组件中使用类的方法吗?如果节点和浏览器都支持它,我不确定为什么这会是一个问题。
  • XMLHttpRequest 在浏览器上受支持,因为它内置到浏览器中。浏览器支持您使用的包。 服务器 上的 NodeJS 支持它,因为它旨在向服务器提供浏览器内置的 XMLHttpRequest 功能。由于您不是在开发服务器端应用程序,因此您根本不需要该软件包。
猜你喜欢
  • 1970-01-01
  • 2015-07-12
  • 2021-06-17
  • 2021-05-17
  • 2019-06-24
  • 1970-01-01
  • 2022-11-09
  • 2018-11-18
  • 2017-04-24
相关资源
最近更新 更多