如何在 ReactJS 应用程序的服务器端导入模块“child_process”

Posted

技术标签:

【中文标题】如何在 ReactJS 应用程序的服务器端导入模块“child_process”【英文标题】:how to import module 'child_process' on server side of a ReactJS app 【发布时间】:2018-09-17 15:55:34 【问题描述】:

如何在 ReactJS 应用程序中使用像“child_process”这样的模块? (react@16.3.1 / Linux)

这些语法失败:

import  spawn  from 'child_process'
const ls = spawn('ls', ['-al']);

产量:TypeError: Object(...) is not a function

import cp from 'child_process';
const ls = cp.spawn('ls', ['-al']);

产量:TypeError: __WEBPACK_IMPORTED_MODULE_3_child_process___default.a.spawn is not a function

var  spawn  = require('child_process');
const ls = spawn('ls', ['-al']);  

产量:TypeError: spawn is not a function

【问题讨论】:

你的用例到底是什么? 抱歉,我的问题表述不当:我的应用实际上有服务器端代码(发生异常的地方),但错误与 React 无关。我终于找到了导入模块 child_process.there 的方法。感谢您的帮助! 【参考方案1】:

您不能在反应应用程序中使用节点的模块child_process

您无法访问操作系统系统进程以从浏览器生成和派生,因为它是一个孤立的环境。

【讨论】:

不过,React 应用程序的一部分正在服务器端运行:是否可以在服务器端生成子进程? 即使你在服务器上使用 s-s-r,你也不能,而且我没有看到任何你想使用 react 来生成子进程的用例。使用 node.js 生成进程,进行计算并将它们发送给 react(这是一个库,用于显示从服务器接收到的数据到 DOM)。 React 只能提供浏览器支持的功能。 (出于安全原因,浏览器不允许访问客户端操作系统和生成进程)。【参考方案2】:

ReactJS 仅在您的应用程序的客户端工作并与 DOM 交互。子进程在您的应用程序的服务器端触发。

所以这两件事是分开的。

ReactJS 可以向服务器发起一个 http 调用,然后触发子进程。服务器可以将子进程的结果发送回 React 客户端。

【讨论】:

以上是关于如何在 ReactJS 应用程序的服务器端导入模块“child_process”的主要内容,如果未能解决你的问题,请参考以下文章

typescript+reactjs+requirejs:如何将 react-dom 导入 typescript

ReactJS 反应路由器 RoutingContext

ReactJS - 简单的服务器端 API 请求

如何在reactjs中删除导入的css

如何将服务器端渲染中的数据从节点传递给reactjs组件

在 ReactJS 中使用 Web Serial