Enviar notificaciones nativas de la plataforma cruzada usando node.js. Centro de notificaciones para macOS, notify-osd / libnotify-bin para Linux, tostadores para Windows 8/10 o globos de barras de tareas para versiones anteriores de Windows. Se usa Growl si no se cumplen ninguno de estos requisitos. Funciona bien con Electron.
Mostrar una notificación nativa en macOS, Windows, Linux:
const notifier = require ( 'node-notifier' ) ;
// String
notifier . notify ( 'Message' ) ;
// Object
notifier . notify ( {
title : 'My notification' ,
message : 'Hello, there!'
} ) ; notify-osd o libnotify-bin instalado (Ubuntu debería tener esto de forma predeterminada)Consulte la documentación y el diagrama de flujo para la elección del reportero.
npm install --save node-notifierCLI se ha movido a un proyecto separado: https://github.com/mikaelbr/node-notifier-cli
Uso estándar, con respaldo multiplataforma como se define en el diagrama de flujo del reportero. Todas las opciones a continuación funcionarán de una forma u otra en la mayoría de las 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
} ) ;Si desea un control de grano súper fino, puede personalizar a cada reportero individualmente, lo que le permite ajustar opciones específicas para diferentes sistemas.
Consulte a continuación la documentación sobre cada reportero.
Ejemplo:
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 ( ) ;O, si está utilizando varios reporteros (o eres flojo):
// 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 El mismo uso y configuración de parámetros que- terminal-notifier .
Native Notification Center requiere MacOS versión 10.8 o superior. Si tiene una versión anterior, Growl será el respaldo. Si Growl no está instalado, se devolverá un error en la devolución de llamada.
Debido a que node-notifier se envuelve alrededor de terminal-notifier , puede hacer cualquier cosa que terminal-notifier pueda, simplemente pasando las propiedades al método notify .
Por ejemplo:
terminal-notifier dice -message , puede hacer {message: 'Foo'}terminal-notifier dice -list ALL , puede hacer {list: 'ALL'} .La notificación es el foco principal de este módulo, por lo que enumerar y activar funcionan, pero no están 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: La opción wait es la taquigrafía para timeout: 5 . Esto solo establece un tiempo de espera durante 5 segundos. ¡ No hace que la notificación sea pegajosa!
A partir de la versión 6.0, hay un conjunto timeout predeterminado de 10 para garantizar que la aplicación se cierre correctamente. Para eliminar el timeout y tener una notificación de cierre instantáneamente (no admite acciones), establezca timeout en false . Si está utilizando action se recomienda establecer timeout en un valor alto para garantizar que el usuario tenga tiempo para responder.
Excepción: si se define reply , se recomienda establecer timeout a un valor alto o en nada.
Para notificaciones de MacOS: icon , contentImage y todas las formas de reply / actions requieren macOS 10.9.
El sonido puede ser uno de estos: Basso , Blow , Bottle , Frog , Funk , Glass , Hero , Morse , Ping , Pop , Purr , Sosumi , Submarine , Tink .
Si sound es simplemente true , se usa Bottle .
Ver también:
Aclaración de ruta personalizada
customPath toma un valor de una ruta relativa o absoluta al binario de su bifurcación/versión personalizada de terminal-notifier .
Ejemplo: ./vendor/mac.noindex/terminal-notifier.app/Contents/MacOS/terminal-notifier terminal-notifier.app/contents/macos/merminal-notifier
Aclaración de Spotlight
terminal-notifier.app reside en una carpeta mac.noindex para evitar que Spotlight indexe la aplicación.
WindowsToasterNota: Hay algunas limitaciones para las imágenes en las notificaciones nativas de Windows 8:
Estas limitaciones se deben al sistema de notificación de tostadas. Un buen consejo es usar algo como path.join o path.delimiter para mantener sus rutas multiplataforma.
De Mikaelbr/Gulp-Notify#90 (comentario)
Puede hacer que funcione yendo a Sistema> Notificaciones y acciones. La aplicación 'Toast' debe tener pancartas habilitadas. (Puede activar pancartas haciendo clic en la aplicación 'Toast' y configurando las 'pancartas de notificación' a ON)
Actualización de los creadores de otoño de Windows 10 (versión 1709) Nota:
¡Snoretoast se usa para obtener tostadas de ventanas nativas!
El comportamiento predeterminado es tener la tostadora subyacente de la aplicación como appID . Esto funciona como se esperaba, pero muestra SnoreToast como texto en la notificación.
Con la actualización de los creadores de otoño, las notificaciones en Windows 10 solo funcionarán como se esperaba si se especifica un appID válido. Su appID debe ser exactamente el mismo valor registrado durante la instalación de su aplicación.
Puede encontrar la ID de su aplicación buscando en el registro el appID que especificó en la instalación de su aplicación. Por ejemplo: si usa el marco de las ardillas, su appID será algo así 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
} ) ;Vea más información sobre el uso de Growly.
WindowsBalloon Para versiones anteriores de Windows, se utilizan globos de la barra de tareas (a menos que se active el respaldo y Growl se esté ejecutando). El notificador de globos utiliza un gran proyecto llamado 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 ) ;
}
) ; Vea el uso completo en la página de inicio del proyecto: notifu .
NotifySend Nota: notify-send no admite el indicador 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
} ) ; Ver banderas y opciones en la página del hombre notify-send(1)
node-notifier es posible a través del software de código abierto. Un agradecimiento muy especial a todos los usos node-notifier módulos.
terminal-notifierSnoretoastnotifugrowlyVea este problema de Araxeus.
SnoreToast Consulte la nota en "Actualización de creadores de otoño de Windows 10" en la sección Windows. Respuesta corta: actualice su appID .
Si no ve notificaciones dentro de WSL2, es posible que deba cambiar el permiso de los archivos de proveedores EXE (Snoretoast). Ver número para más información
Cuando se usa node-notifier dentro de una sesión de TMUX, puede causar un colgar en el sistema. Esto se puede resolver siguiendo los pasos descritos en este comentario.
Hay aún más información aquí #61 (comentario).
Incluso si define un icono en el objeto de configuración para node-notifier , verá un pequeño icono terminal en la notificación (consulte el ejemplo en la parte superior de este documento).
Esta es la forma en que funcionan las notificaciones en MacOS. Siempre muestran el ícono de la aplicación principal que inicia la notificación. Para node-notifier , terminal-notifier es el iniciador, y tiene el icono terminal definido como su icono.
Para definir su icono personalizado, debe bifurcar terminal-notifier y construir su versión personalizada con su icono.
Consulte el número 71 para obtener más información #71.
Si empacar su aplicación de electrones como un asar , encontrará que node-notifier no se cargará.
Debido a la forma en que funciona ASAR, no puede ejecutar un binario desde dentro de un asar . Como una solución simple, al empaquetar la aplicación en un ASAR, asegúrese de que --unpack el vendor/ carpeta del node-notifier , por lo que el módulo aún tiene acceso a los binarios de notificación.
Puede hacerlo con el siguiente comando:
asar pack . app.asar --unpack " ./node_modules/node-notifier/vendor/** " O si usa electron-builder sin usar ASAR directamente, agregue el objeto build a su package.json como se muestra a continuación:
...
build: {
asarUnpack: [
' ./node_modules/node-notifier/**/* ' ,
]
},
...Para problemas que usan con el módulo PKG. Verifique este problema: #220 (comentario)
Cuando use node-notifier dentro de webpack , debe agregar el fragmento a continuación a su webpack.config.js .
Esto es necesario porque node-notifier carga los notificadores de un binario, por lo que necesita una ruta de archivo relativo. Cuando Webpack compila los módulos, suprime los directorios de archivos, lo que hace que node-notifier se equivoca en ciertas plataformas.
Para solucionar esto, puede configurar Webpack para mantener los directorios de archivos relativos. Hágalo agregando el siguiente código a su webpack.config.js :
node: {
__filename : true ,
__dirname : true
} Este paquete tiene licencia utilizando la licencia MIT.
Snoretoast y Notifu tienen licencias en sus versiones vendidas que no coinciden con la licencia MIT, LGPL-3 y BSD 3 cláusula para ser específicas. No somos abogados, pero hemos hecho nuestros mejores esfuerzos para cumplir con los términos en esas licencias mientras lanzamos este paquete utilizando la licencia que elegimos.