Node 核心模块之 child_process

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Node 核心模块之 child_process相关的知识,希望对你有一定的参考价值。

参考技术A child_process 这个模块非常重要。掌握了它,等于在node的世界开启了一扇新的大门。

以下四个方法均返回 ChildProcess 的实例

主要的区别在于第一个参数的含义不同:
对于 exec 和 execFile 传递的是 command 或 可执行文件,类似 ls 或者 start.sh 或者 node;可接受回调; 二者不同的是命令的参数位置
对于 fork 传递的是node支持的脚本,类似 start.js,无回调
对于 spawn,它是以上三个方法实现的基础。

对于构建开发环境而言,一般至少会起两个进程,主进程起 devServer;还需一个进程起mock API 服务器,所以一般用 fork 较多

然后一个 gulp 命令就会启动两个进程

1、 ChildProcess 类的实例都是 EventEmitter ,表示衍生的子进程
2、每个实例都有 stdout, stdin, stderr 三个流对象
3、通过 fork 产生的子进程与父进程可以用 send 方法及监听 message 事件来相互通信
4、 几个事件: error , message , exit , close , disconnect

在没有 Webpack 的情况下使用模块“child_process”

【中文标题】在没有 Webpack 的情况下使用模块“child_process”【英文标题】:Using module "child_process" without Webpack 【发布时间】:2016-05-01 05:19:42 【问题描述】:

我正在使用 Webpack 来捆绑依赖项,其中之一是电子邮件服务 postmark。该服务依赖于一个名为 child_process 的东西,显然是 node 附带的。

问题是,当我尝试运行 webpack 来捆绑我的应用程序时,它会抱怨:

找不到模块:错误:无法解析模块中的“child_process”...

网上大部分答案都说,针对这个错误,我应该加一行:

  node: 
    child_process: 'empty'
  

到我的 webpack 配置。但这没有任何意义,因为 webpack 只是不尝试查找 child_process,因此,当我运行我的应用程序时,我收到以下错误:

未捕获的类型错误:exec 不是函数

这是来自postmark(依赖于child_process 的服务)的错误,抱怨child_process 模块中的exec 函数不存在。

因此,我想知道如何在我的构建中包含 child_process 模块而不引起 webpack 抱怨?

【问题讨论】:

【参考方案1】:

这里是 Postmark 的前端开发者。

您似乎正在尝试将 postmark.js 捆绑到您的客户端 JavaScript 中,但 https://github.com/wildbit/postmark.js 是一个 Node.js 库。这意味着它不会在浏览器中运行,需要一个正在运行的 Node.js 服务器。

不支持浏览器环境的主要原因是安全性。正如你在这个例子中看到的:

var postmark = require("postmark");
var client = new postmark.Client("<server key>");

它要求您插入身份验证令牌。将它与您的客户端 JS 捆绑在一起会暴露它并允许每个人访问您的邮戳帐户 API。

希望这可以澄清它。

【讨论】:

感谢您的回复 - 我已将其移植到我的 express 后端,它运行良好。

以上是关于Node 核心模块之 child_process的主要内容,如果未能解决你的问题,请参考以下文章

node模块之events模块

nodeJS之事件events

Node.js之Web学习笔记

saltsatck之配置管理states

node概念笔记之eventemitter

Node.js 核心模块学习