Envie notificações nativas de plataforma cruzada usando node.js. Centro de notificação para MacOS, notify-osd / libnotify-bin para Linux, torradeiras para Windows 8/10 ou balões da barra de tarefas para versões anteriores do Windows. O GROFL é usado se nenhum desses requisitos for atendido. Funciona bem com o elétron.
Mostre uma notificação nativa no macOS, Windows, Linux:
const notifier = require ( 'node-notifier' ) ;
// String
notifier . notify ( 'Message' ) ;
// Object
notifier . notify ( {
title : 'My notification' ,
message : 'Hello, there!'
} ) ; notify-osd ou libnotify-bin instalado (o Ubuntu deve ter isso por padrão)Consulte a documentação e o fluxograma para opção de repórter.
npm install --save node-notifierA CLI mudou-se para o projeto separado: https://github.com/mikaelbr/node-notifier cli
Uso padrão, com fallbacks de plataforma cruzada, conforme definido no fluxograma repórter. Todas as opções abaixo funcionarão de uma maneira ou de outra na maioria das plataformas.
const notifier = require ( 'node-notifier' ) ;
const path = require ( 'path' ) ;
notifier . notify (
{
title : 'My awesome title' ,
message : 'Hello from node, Mr. User!' ,
icon : path . join ( __dirname , 'coulson.jpg' ) , // Absolute path (doesn't work on balloons)
sound : true , // Only Notification Center or Windows Toasters
wait : true // Wait with callback, until user action is taken against notification, does not apply to Windows Toasters as they always wait or notify-send as it does not support the wait option
} ,
function ( err , response , metadata ) {
// Response is response from notification
// Metadata contains activationType, activationAt, deliveredAt
}
) ;
notifier . on ( 'click' , function ( notifierObject , options , event ) {
// Triggers if `wait: true` and user clicks notification
} ) ;
notifier . on ( 'timeout' , function ( notifierObject , options ) {
// Triggers if `wait: true` and notification closes
} ) ;Se você deseja um controle super fino, pode personalizar cada repórter individualmente, permitindo ajustar opções específicas para diferentes sistemas.
Veja abaixo a documentação em cada repórter.
Exemplo:
const NotificationCenter = require ( 'node-notifier/notifiers/notificationcenter' ) ;
new NotificationCenter ( options ) . notify ( ) ;
const NotifySend = require ( 'node-notifier/notifiers/notifysend' ) ;
new NotifySend ( options ) . notify ( ) ;
const WindowsToaster = require ( 'node-notifier/notifiers/toaster' ) ;
new WindowsToaster ( options ) . notify ( ) ;
const Growl = require ( 'node-notifier/notifiers/growl' ) ;
new Growl ( options ) . notify ( ) ;
const WindowsBalloon = require ( 'node-notifier/notifiers/balloon' ) ;
new WindowsBalloon ( options ) . notify ( ) ;Ou, se você estiver usando vários repórteres (ou é preguiçoso):
// NOTE: Technically, this takes longer to require
const nn = require ( 'node-notifier' ) ;
new nn . NotificationCenter ( options ) . notify ( ) ;
new nn . NotifySend ( options ) . notify ( ) ;
new nn . WindowsToaster ( options ) . notify ( options ) ;
new nn . WindowsBalloon ( options ) . notify ( options ) ;
new nn . Growl ( options ) . notify ( options ) ; NotificationCenter Mesmo uso e configuração de parâmetro como terminal-notifier .
O centro de notificação nativo requer macOS versão 10.8 ou superior. Se você tiver uma versão anterior, Growl será o fallback. Se o GROFL não estiver instalado, um erro será retornado no retorno de chamada.
Como node-notifier envolve terminal-notifier , você pode fazer qualquer coisa que terminal-notifier possa, apenas passando propriedades para o método notify .
Por exemplo:
terminal-notifier disser -message , você pode fazer {message: 'Foo'}terminal-notifier disser -list ALL , você pode fazer {list: 'ALL'} .A notificação é o foco principal deste módulo; portanto, listar e ativar funcionam, mas eles não estão documentados.
const NotificationCenter = require ( 'node-notifier' ) . NotificationCenter ;
var notifier = new NotificationCenter ( {
withFallback : false , // Use Growl Fallback if <= 10.8
customPath : undefined // Relative/Absolute path to binary if you want to use your own fork of terminal-notifier
} ) ;
notifier . notify (
{
title : undefined ,
subtitle : undefined ,
message : undefined ,
sound : false , // Case Sensitive string for location of sound file, or use one of macOS' native sounds (see below)
icon : 'Terminal Icon' , // Absolute Path to Triggering Icon
contentImage : undefined , // Absolute Path to Attached Image (Content Image)
open : undefined , // URL to open on Click
wait : false , // Wait for User Action against Notification or times out. Same as timeout = 5 seconds
// New in latest version. See `example/macInput.js` for usage
timeout : 5 , // Takes precedence over wait if both are defined.
closeLabel : undefined , // String. Label for cancel button
actions : undefined , // String | Array<String>. Action label or list of labels in case of dropdown
dropdownLabel : undefined , // String. Label to be used if multiple actions
reply : false // Boolean. If notification should take input. Value passed as third argument in callback and event emitter.
} ,
function ( error , response , metadata ) {
console . log ( response , metadata ) ;
}
) ; NOTA: A opção wait é abreviada para timeout: 5 . Isso apenas define um tempo limite por 5 segundos. Não torna a notificação pegajosa!
A partir da versão 6.0, existe um conjunto timeout padrão de 10 para garantir que o aplicativo feche corretamente. Para remover o timeout e ter uma notificação de fechamento instantaneamente (não suporta ações), defina timeout como false . Se você estiver usando action , é recomendável definir timeout para um valor alto para garantir que o usuário tenha tempo para responder.
Exceção: Se reply for definida, é recomendável definir timeout para um valor alto ou nada.
Para as notificações do MacOS: icon , contentImage e todas as formas de reply / actions requerem o MacOS 10.9.
O som pode ser um deles: Basso , Blow , Bottle , Frog , Funk , Glass , Hero , Morse , Ping , Pop , Purr , Sosumi , Submarine , Tink .
Se sound for simplesmente true , Bottle é usada.
Veja também:
Esclarecimento de caminho personalizado
customPath leva um valor de um caminho relativo ou absoluto para o binário da sua versão do garfo/personalizada do terminal-notifier .
Exemplo: ./vendor/mac.noindex/terminal-notifier.app/Contents/MacOS/terminal-notifier
Esclarecimento em destaque
terminal-notifier.app reside em uma pasta mac.noindex para impedir que os holofotes indexem o aplicativo.
WindowsToasterNota: Existem algumas limitações para imagens nas notificações nativas do Windows 8:
Essas limitações são devidas ao sistema de notificação de brinde. Uma boa dica é usar algo como path.join path.delimiter
De Mikaelbr/Gulp-Notify#90 (comentário)
Você pode fazê -lo funcionar indo ao sistema> Notificações e ações. O aplicativo 'brinde' precisa ter banners ativados. (Você pode ativar banners clicando no aplicativo 'Toast' e definindo o 'Mostrar banners de notificação' para ON)
Atualização do Windows 10 Fall Creators (versão 1709) NOTA:
O Snoretoast é usado para obter torradas nativas do Windows!
O comportamento padrão é ter a torradeira subjacente Applicaton como appID . Isso funciona conforme o esperado, mas mostra SnoreToast como texto na notificação.
Com a atualização dos criadores de outono, as notificações no Windows 10 só funcionarão como esperado se um appID válido for especificado. Seu appID deve ser exatamente o mesmo valor que foi registrado durante a instalação do seu aplicativo.
Você pode encontrar o ID do seu aplicativo pesquisando o registro do appID que você especificou na instalação do seu aplicativo. Por exemplo: se você usar a estrutura do esquilo, seu appID será algo como com.squirrel.your.app .
const WindowsToaster = require ( 'node-notifier' ) . WindowsToaster ;
var notifier = new WindowsToaster ( {
withFallback : false , // Fallback to Growl or Balloons?
customPath : undefined // Relative/Absolute path if you want to use your fork of SnoreToast.exe
} ) ;
notifier . notify (
{
title : undefined , // String. Required
message : undefined , // String. Required if remove is not defined
icon : undefined , // String. Absolute path to Icon
sound : false , // Bool | String (as defined by http://msdn.microsoft.com/en-us/library/windows/apps/hh761492.aspx)
id : undefined , // Number. ID to use for closing notification.
appID : undefined , // String. App.ID and app Name. Defaults to no value, causing SnoreToast text to be visible.
remove : undefined , // Number. Refer to previously created notification to close.
install : undefined // String (path, application, app id). Creates a shortcut <path> in the start menu which point to the executable <application>, appID used for the notifications.
} ,
function ( error , response ) {
console . log ( response ) ;
}
) ;Growl const Growl = require ( 'node-notifier' ) . Growl ;
var notifier = new Growl ( {
name : 'Growl Name Used' , // Defaults as 'Node'
host : 'localhost' ,
port : 23053
} ) ;
notifier . notify ( {
title : 'Foo' ,
message : 'Hello World' ,
icon : fs . readFileSync ( __dirname + '/coulson.jpg' ) ,
wait : false , // Wait for User Action against Notification
// and other growl options like sticky etc.
sticky : false ,
label : undefined ,
priority : undefined
} ) ;Veja mais informações sobre o uso de crescimento.
WindowsBalloon Para versões anteriores do Windows, os balões da barra de tarefas são usados (a menos que o fallback seja ativado e o rosnado esteja em execução). O notificador de balões usa um ótimo projeto chamado notifu .
const WindowsBalloon = require ( 'node-notifier' ) . WindowsBalloon ;
var notifier = new WindowsBalloon ( {
withFallback : false , // Try Windows Toast and Growl first?
customPath : undefined // Relative/Absolute path if you want to use your fork of notifu
} ) ;
notifier . notify (
{
title : undefined ,
message : undefined ,
sound : false , // true | false.
time : 5000 , // How long to show balloon in ms
wait : false , // Wait for User Action against Notification
type : 'info' // The notification type : info | warn | error
} ,
function ( error , response ) {
console . log ( response ) ;
}
) ; Veja o uso total na página inicial do projeto: notifu .
NotifySend NOTA: notify-send não suporta o sinalizador wait .
const NotifySend = require ( 'node-notifier' ) . NotifySend ;
var notifier = new NotifySend ( ) ;
notifier . notify ( {
title : 'Foo' ,
message : 'Hello World' ,
icon : __dirname + '/coulson.jpg' ,
wait : false , // Defaults no expire time set. If true expire time of 5 seconds is used
timeout : 10 , // Alias for expire-time, time etc. Time before notify-send expires. Defaults to 10 seconds.
// .. and other notify-send flags:
'app-name' : 'node-notifier' ,
urgency : undefined ,
category : undefined ,
hint : undefined
} ) ; Veja sinalizadores e opções na página do homem notify-send(1)
node-notifier é possível através do software de código aberto. Um agradecimento muito especial a todos os usos do Node node-notifier .
terminal-notifierSnoretoastnotifugrowlyVeja esta questão de Araxeus.
SnoreToast Text Consulte a nota na atualização "Windows 10 Fall Creators" na seção do Windows. Resposta curta: Atualize seu appID .
Se você não vir notificações no WSL2, talvez seja necessário alterar a permissão dos arquivos de fornecedores exe (snoretoast). Veja a edição para mais informações
Ao usar node-notifier em uma sessão do TMUX, ela pode causar um suspensão no sistema. Isso pode ser resolvido seguindo as etapas descritas neste comentário
Há ainda mais informações aqui #61 (comentário).
Mesmo se você definir um ícone no objeto de configuração do node-notifier , verá um pequeno ícone de terminal na notificação (consulte o exemplo na parte superior deste documento).
É assim que as notificações no macOS funcionam. Eles sempre mostram o ícone do aplicativo pai iniciando a notificação. Para node-notifier , terminal-notifier é o iniciador e possui o ícone do terminal definido como seu ícone.
Para definir seu ícone personalizado, você precisa forçar terminal-notifier e criar sua versão personalizada com o seu ícone.
Veja a edição #71 para obter mais informações #71.
Se a embalagem do seu aplicativo Electron como asar , você encontrará node-notifier não conseguirá carregar.
Devido à maneira como o ASAR funciona, você não pode executar um binário de dentro de um asar . Como uma solução simples, ao empacotar o aplicativo em um ASAR, certifique-se de que você --unpack o vendor/ pasta do node-notifier , para que o módulo ainda tenha acesso aos binários de notificação.
Você pode fazer isso com o seguinte comando:
asar pack . app.asar --unpack " ./node_modules/node-notifier/vendor/** " Ou se você usar electron-builder sem usar diretamente o ASAR, anexe o objeto build ao seu package.json como abaixo:
...
build: {
asarUnpack: [
' ./node_modules/node-notifier/**/* ' ,
]
},
...Para problemas usando com o módulo PKG. Confira este problema: #220 (comentário)
Ao usar node-notifier dentro do webpack , você deve adicionar o snippet abaixo ao seu webpack.config.js .
Isso é necessário porque node-notifier carrega os notificadores de um binário, por isso precisa de um caminho de arquivo relativo. Quando o WebPack compila os módulos, ele suprime os diretórios de arquivo, fazendo com que node-notifier tenha um erro em determinadas plataformas.
Para corrigir isso, você pode configurar o WebPack para manter os diretórios de arquivo relativos. Faça isso anexando o código a seguir ao seu webpack.config.js :
node: {
__filename : true ,
__dirname : true
} Este pacote está licenciado usando a licença do MIT.
O SnoreToast e o Notifu têm licenças em suas versões fornecedores que não correspondem à licença do MIT, LGPL-3 e BSD 3-cláusores para serem específicos. Não somos advogados, mas fizemos nossos melhores esforços para estar em conformidade com os termos nessas licenças enquanto libera esse pacote usando a licença que escolhemos.