Envoyer des notifications natives transformatrices à l'aide de node.js. Centre de notification pour macOS, notify-osd / libnotify-bin pour Linux, toasters pour Windows 8/10 ou des ballons de barre de tâches pour les versions Windows antérieures. Growl est utilisé si aucune de ces exigences n'est satisfaite. Fonctionne bien avec l'électron.
Afficher une notification native sur 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 installé (Ubuntu devrait l'avoir par défaut)Voir la documentation et le flux pour le choix du rapporteur.
npm install --save node-notifierLa CLI a déménagé dans un projet séparé: https://github.com/mikaelbr/node-notifier-cli
Utilisation standard, avec des replies multiplateformes telles que définies dans le graphique de flux de reporter. Toutes les options ci-dessous fonctionneront d'une manière ou d'une autre sur la plupart des plateformes.
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 vous voulez un contrôle très fin, vous pouvez personnaliser chaque journaliste individuellement, vous permettant de régler des options spécifiques pour différents systèmes.
Voir ci-dessous pour la documentation sur chaque journaliste.
Exemple:
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, si vous utilisez plusieurs journalistes (ou si vous êtes paresseux):
// 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 Même utilisation et configuration des paramètres comme terminal-notifier .
Le centre de notification natif nécessite la version 10.8 macOS ou plus. Si vous avez une version antérieure, Growl sera le repli. Si Growl n'est pas installé, une erreur sera renvoyée dans le rappel.
Étant donné que node-notifier s'enroule autour de terminal-notifier , vous pouvez faire tout ce que terminal-notifier peut, simplement en passant des propriétés à la méthode notify .
Par exemple:
terminal-notifier dit -message , vous pouvez faire {message: 'Foo'}terminal-notifier dit -list ALL , vous pouvez faire {list: 'ALL'} .La notification est l'objectif principal de ce module, donc la liste et l'activation du fonctionnement, mais elles ne sont pas documentées.
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 ) ;
}
) ; Remarque: L'option wait est un raccourci pour timeout: 5 . Cela ne fait que le temps mort pendant 5 secondes. Cela ne rend pas la notification collante!
À partir de la version 6.0, il existe un ensemble timeout par défaut de 10 pour s'assurer que l'application se ferme correctement. Afin de supprimer le timeout et d'avoir une notification de clôture instantanément (ne prend pas en charge les actions), définissez timeout sur false . Si vous utilisez action , il est recommandé de définir timeout sur une valeur élevée pour garantir que l'utilisateur a le temps de répondre.
Exception: si reply est définie, il est recommandé de définir timeout sur une valeur élevée, ou à rien du tout.
Pour les notifications macos: icon , contentImage et toutes les formes de reply / actions nécessitent le macOS 10.9.
Le son peut en être l'un de ces: Basso , Blow , Bottle , Frog , Funk , Glass , Hero , Morse , Ping , Pop , Purr , Sosumi , Submarine , Tink .
Si sound est simplement true , Bottle est utilisée.
Voir aussi:
Clarification du chemin personnalisé
customPath prend une valeur d'un chemin relatif ou absolu vers le binaire de votre version / version personnalisée du terminal-notifier .
Exemple: ./vendor/mac.noindex/terminal-notifier.app/Contents/MacOS/terminal-notifier
Clarification des projecteurs
terminal-notifier.app réside dans un dossier mac.noindex pour empêcher les projecteurs d'indexer l'application.
WindowsToasterRemarque: Il existe certaines limites pour les images dans les notifications de Windows 8 natives:
Ces limitations sont dues au système de notification de toast. Une bonne astuce consiste à utiliser quelque chose comme path.join ou path.delimiter pour garder votre chemin multiplateforme.
De Mikaelbr / Gulp-Notify # 90 (commentaire)
Vous pouvez le faire fonctionner en allant dans le système> Notifications et actions. L'application «Toast» doit avoir des bannières activées. (Vous pouvez activer les bannières en cliquant sur l'application `` Toast '' et en définissant les "Afficher les bannières de notification")
Mise à jour des créateurs d'automne Windows 10 (version 1709) Remarque:
Le soretoast est utilisé pour obtenir des toasts Windows natifs!
Le comportement par défaut consiste à avoir l'applicat de grille-pain sous-jacent comme appID . Cela fonctionne comme prévu, mais montre SnoreToast comme texte dans la notification.
Avec la mise à jour des créateurs d'automne, les notifications sur Windows 10 ne fonctionneront que comme prévu si un appID valide est spécifié. Votre appID doit être exactement la même valeur que celle enregistrée lors de l'installation de votre application.
Vous pouvez trouver l'ID de votre application en recherchant le registre de l' appID que vous avez spécifié lors de l'installation de votre application. Par exemple: si vous utilisez le framework Squirrel, votre appID sera quelque chose comme 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
} ) ;Voir plus d'informations sur l'utilisation de Groandly.
WindowsBalloon Pour les versions antérieures de Windows, des ballons de barre de tâches sont utilisés (à moins que le replacement ne soit activé et que Growl soit en cours d'exécution). Le notificateur de ballons utilise un grand projet appelé 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 ) ;
}
) ; Voir une utilisation complète sur la page d'accueil du projet: notifu .
NotifySend Remarque: notify-send ne prend pas en charge l'indicateur 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
} ) ; Voir les drapeaux et les options sur la page Man notify-send(1)
node-notifier est rendu possible via des logiciels open source. Un merci très spécial à tous les modules node-notifier utilise.
terminal-notifierSnoretoastnotifugrowlyVoir ce problème par Araxeus.
SnoreToast Text Voir note sur "Mise à jour des créateurs de Fall Windows 10" dans la section Windows. Réponse courte: mettez à jour votre appID .
Si vous ne voyez pas de notifications dans WSL2, vous devrez peut-être modifier l'autorisation des fichiers du fournisseur EXE (soretoast). Voir le problème pour plus d'informations
Lorsque vous utilisez node-notifier dans une session TMUX, il peut provoquer un accrochage dans le système. Cela peut être résolu en suivant les étapes décrites dans ce commentaire
Il y a encore plus d'informations ici # 61 (commentaire).
Même si vous définissez une icône dans l'objet de configuration pour node-notifier , vous verrez une petite icône terminale dans la notification (voir l'exemple en haut de ce document).
C'est ainsi que les notifications sur le travail des macOS. Ils montrent toujours l'icône de l'application parent qui a lancé la notification. Pour node-notifier , terminal-notifier est l'initiateur, et il a l'icône terminale définie comme son icône.
Pour définir votre icône personnalisée, vous devez fourrer terminal-notifier et créer votre version personnalisée avec votre icône.
Voir le numéro # 71 pour plus d'informations # 71.
Si l'emballage de votre application Electron en tant que asar , vous constaterez que node-notifier ne se chargera pas.
En raison de la façon dont ASAR fonctionne, vous ne pouvez pas exécuter un binaire à partir d'un asar . En tant que solution simple, lors de l'emballage de l'application dans un ASAR, assurez-vous de vous --unpack le vendor/ dossier de node-notifier , le module a donc toujours accès aux binaires de notification.
Vous pouvez le faire avec la commande suivante:
asar pack . app.asar --unpack " ./node_modules/node-notifier/vendor/** " Ou si vous utilisez electron-builder sans utiliser directement ASAR, ajoutez l'objet build à votre package.json comme ci-dessous:
...
build: {
asarUnpack: [
' ./node_modules/node-notifier/**/* ' ,
]
},
...Pour les problèmes qui utilisent avec le module PKG. Vérifiez ce problème: # 220 (commentaire)
Lorsque vous utilisez node-notifier à l'intérieur de webpack , vous devez ajouter l'extrait ci-dessous à votre webpack.config.js .
Ceci est nécessaire car node-notifier charge les notificateurs d'un binaire, il a donc besoin d'un chemin de fichier relatif. Lorsque WebPack compile les modules, il supprime les répertoires de fichiers, provoquant une erreur node-notifier sur certaines plates-formes.
Pour résoudre ce problème, vous pouvez configurer WebPack pour conserver les répertoires de fichiers relatifs. Faites-le en ajoutant le code suivant à votre webpack.config.js :
node: {
__filename : true ,
__dirname : true
} Ce package est autorisé à l'aide de la licence MIT.
Scoretoast et Notifu ont des licences dans leurs versions vendues qui ne correspondent pas à la licence MIT, LGPL-3 et BSD 3 clause pour être spécifiques. Nous ne sommes pas des avocats, mais nous avons fait de nos meilleurs efforts pour se conformer aux termes de ces licences tout en publiant ce package en utilisant la licence que nous avons choisie.