NodeJS不寻常的要求 – 这里发生了什么?

请参阅https://nodejs.org/api/child_process.html上的文档

接下来会发生什么?为什么这样做?

const { exec } = require('child_process'); 

根据我的理解,这只是将exec包装到另一个对象中

 var a = { exec } // a is now { exec: exec } 

但是那里有一个任务.. -Mind Blown-

你的代码示例:

 const { exec } = require('child_process'); 

产生与以下相同的结果:

 const exec = require('child_process').exec; 

这被称为解构赋值destructuring assignment) ,在ES2015(ES6)中是一个新东西,在这里描述:MDN上的解构赋值 。 它允许将源对象的一个​​或多个属性分配给各种types的目的地的各种快捷方式。 在这种情况下,源对象是require('child_process')的结果,而所需的目标是一个名为execvariables,它将从源接收一个命名属性。

当您指定多个属性时,它变得更加有用:

 const { exec, spawn, fork } = require('child_process'); 

这将创build名为execspawnfork模块级variables,其中包含subprocess模块的这些导出属性。 在解构任务之前,你可以完成:

 const child = require('child_process'); const exec = child.exec; const spawn = child.spawn; const fork = child.fork; 

或者会刚刚做到这一点:

 const child = require('child_process'); 

然后,使用child.exec()child.spawn()child.fork()来使用这些方法。 正如你所看到的,解构赋值是一个重要的捷径。 解构有许多forms,你可以做更多高级的事情,比如指定接收variables的名称与指定的属性不同,解构可以和数组一起使用,而不仅仅是对象。

以下是有关该主题的其他几篇参考文章:

ECMAScript 6中的解构和参数处理

代码ECMAScript 6中的破坏示例

解构的解释

这是ES6规范的特殊符号。 在这里,您将提取具有相同名称的variables中的require对象的属性exec的值。

 const { exec } = require('child_process'); // Equals const exec = require('child_process').exec; 

你可以提取一个像这样的对象的索姆属性。

 const { exec, spawn, fork } = require('child_process'); let { a, b } = { a: 'foo', b: 'bar' }; 

加载库时特别有用。

这是调用解构赋值