Colchetes (colchetes) na instrução 'require' do Node.js

97

Estou tentando entender a diferença entre as duas declarações 'exigir' abaixo.

Especificamente, qual é o propósito do { }s enrolado ipcMain?

const electron = require('electron')

const {ipcMain} = require('electron')

Ambos parecem atribuir o conteúdo do electronmódulo, mas obviamente funcionam de maneira diferente.

Alguém pode lançar alguma luz?

AproposArmadillo
fonte

Respostas:

142

O segundo exemplo usa desestruturação.

Isso irá chamar a variável específica (incluindo funções) que são exportadas do módulo necessário.

Por exemplo (functions.js):

module.exports = {
   func1,
   func2
}

está incluído em seu arquivo:

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

Agora você pode chamá-los individualmente,

func1()
func2()

em oposição a:

const Functions = require('./functions')

são chamados usando a notação de ponto:

Functions.func1()
Functions.func2()

Espero que isto ajude.

Você pode ler sobre desestruturação aqui , é uma parte muito útil do ES6 e pode ser usada com arrays e também com objetos.

alexi2
fonte
19

Com const electron = require('electron'), o ipcMainmódulo estará disponível como electron.ipcMain.

Com const {ipcMain} = require('electron')o ipcMainmódulo estará disponível como ipcMain.

Esta construção é chamada de desestruturação de objetos e atinge o mesmo que a construção Python

from library import ...

Em sua forma básica, ele permite que você se refira às propriedades de um objeto diretamente:

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)

Verifica:

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

Você pode usar a atribuição de desestruturação para importar várias propriedades de um objeto JavaScript, por exemplo:

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

Se você usar uma propriedade que não existe, ela será definida como undefinede você não receberá um erro.

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

Veja também: O que as chaves nas var { … } = …declarações fazem?

user2314737
fonte