Corchetes (llaves) en la declaración 'require' de Node.js

94

Estoy tratando de entender la diferencia entre las dos declaraciones 'requeridas' a continuación.

Específicamente, ¿cuál es el propósito de los { }mensajes envueltos ipcMain?

const electron = require('electron')

const {ipcMain} = require('electron')

Ambos parecen asignar el contenido de la electron módulo, pero obviamente funcionan de manera diferente.

¿Alguien puede arrojar algo de luz?

AproposArmadillo
fuente

Respuestas:

134

El segundo ejemplo usa la desestructuración.

Esto llamará a la variable específica (incluidas las funciones) que se exportan desde el módulo requerido.

Por ejemplo (functions.js):

module.exports = {
   func1,
   func2
}

está incluido en su archivo:

const { func1, func2 } = require('./functions')

Ahora puede llamarlos individualmente,

func1()
func2()

Opuesto a:

const Functions = require('./functions')

se llaman usando notación de puntos:

Functions.func1()
Functions.func2()

Espero que esto ayude.

Puede leer acerca de la desestructuración aquí , es una parte muy útil de ES6 y se puede usar con matrices y objetos.

alexi2
fuente
19

Con const electron = require('electron'), el ipcMainmódulo estará disponible como electron.ipcMain.

Con const {ipcMain} = require('electron')el ipcMainmódulo estará disponible como ipcMain.

Esta construcción se llama desestructuración de objetos y logra lo mismo que la construcción de Python

from library import ...

En su forma básica, le permite hacer referencia a las propiedades de un objeto directamente:

var o = {prop1: '1', prop2: 2}
var {prop1, prop2} = o
console.log(prop1) // '1' (same as o.prop1)
console.log(prop2) // 2 (same as o.prop2)

Cheque:

const {ipcMain} = require('electron')
const myElectron = require('electron')
const myipcMain = myElectron.ipcMain
console.log(myipcMain===ipcMain) // true

Puede utilizar la asignación de desestructuración para importar varias propiedades de un objeto JavaScript, por ejemplo:

const { app, BrowserWindow, ipcMain } = require('electron')

Si usa una propiedad que no existe, se establecerá en undefinedy no obtendrá un error.

const {app, BrowserWindow, ipcMain, doesntExist} = require('electron')
console.log(doesntExist) // undefined

Ver también: ¿Qué hacen las llaves en las var { … } = …declaraciones?

usuario2314737
fuente