Senden Sie Cross Platform Native Benachrichtigungen mit node.js. Benachrichtigungszentrum für macOS, notify-osd / libnotify-bin für Linux, Toasters für Windows 8/10 oder Taskleistenballons für frühere Windows-Versionen. Growl wird verwendet, wenn keiner dieser Anforderungen erfüllt wird. Funktioniert gut mit Elektron.
Zeigen Sie eine native Benachrichtigung über MacOS, Windows, Linux:
const notifier = require ( 'node-notifier' ) ;
// String
notifier . notify ( 'Message' ) ;
// Object
notifier . notify ( {
title : 'My notification' ,
message : 'Hello, there!'
} ) ; notify-osd oder libnotify-bin installiert (Ubuntu sollte dies standardmäßig haben)Siehe Dokumentation und Flussdiagramm für die Auswahl der Reporter.
npm install --save node-notifierCLI ist in das gesonderte Projekt umgezogen: https://github.com/mikaelbr/node-notifier-cli
Standardnutzung mit plattformübergreifenden Fallbacks, wie im Reporterflussdiagramm definiert. Alle folgenden Optionen funktionieren in den meisten Plattformen auf die eine oder andere Weise.
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
} ) ;Wenn Sie eine superfeinkörnige Kontrolle wünschen, können Sie jeden Reporter einzeln anpassen, sodass Sie bestimmte Optionen für verschiedene Systeme einstellen können.
Im Folgenden finden Sie die Dokumentation zu jedem Reporter.
Beispiel:
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 ( ) ;Oder, wenn Sie mehrere Reporter verwenden (oder sind faul):
// 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 Gleiche Verwendung und Parameteraufstellung als terminal-notifier .
Das native Benachrichtigungszentrum erfordert macOS -Version 10.8 oder höher. Wenn Sie eine frühere Version haben, ist Growl der Fallback. Wenn Growl nicht installiert wird, wird im Rückruf ein Fehler zurückgegeben.
Da sich node-notifier um terminal-notifier wickelt, können Sie alles, was nicht terminal-notifier , ohne die Eigenschaften an die notify weiterzugeben, durchführen.
Zum Beispiel:
terminal-notifier -message sagt, können Sie {message: 'Foo'} machenterminal-notifier -list ALL sagt, können Sie {list: 'ALL'} tun.Die Benachrichtigung ist der Hauptaugenmerk dieses Moduls, sodass die Auflistung und Aktivierung funktioniert, aber sie sind nicht dokumentiert.
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 ) ;
}
) ; HINWEIS: Die wait ist eine Abkürzung für timeout: 5 . Dies legt nur eine Zeitüberschreitung für 5 Sekunden fest. Es macht die Benachrichtigung nicht klebrig!
Ab Version 6.0 gibt es einen Standard timeout -Satz von 10 , um sicherzustellen, dass die Anwendung ordnungsgemäß geschlossen wird. Um das timeout zu entfernen und eine sofort abschließende Benachrichtigung zu haben (keine Aktionen unterstützt), stellen Sie timeout auf false fest. Wenn Sie action verwenden, wird empfohlen, timeout auf einen hohen Wert festzulegen, um sicherzustellen, dass der Benutzer Zeit zum Ansprechen hat.
Ausnahme: Wenn reply definiert ist, wird empfohlen, timeout entweder auf einen hohen Wert oder gar nichts festzulegen.
Für macOS -Benachrichtigungen: icon , contentImage und alle Formen von reply / actions erfordern MacOS 10.9.
Sound kann einer davon sein: Basso , Blow , Bottle , Frog , Funk , Glass , Hero , Morse , Ping , Pop , Purr , Sosumi , Submarine , Tink .
Wenn sound einfach true ist, wird Bottle verwendet.
Siehe auch:
Benutzerdefinierte Pfadklärung
customPath nimmt einen Wert eines relativen oder absoluten Pfades zur Binärdatei Ihrer Gabel-/benutzerdefinierten Version des terminal-notifier .
Beispiel: ./vendor/mac.noindex/terminal-notifier.app/Contents/MacOS/terminal-notifier
Scheinwerferklarifikation
terminal-notifier.app liegt in einem mac.noindex Ordner, um zu verhindern, dass Spotlight die App indiziert.
WindowsToasterHinweis: Es gibt einige Einschränkungen für Bilder in nativen Windows 8 -Benachrichtigungen:
Diese Einschränkungen sind auf das Toast -Benachrichtigungssystem zurückzuführen. Ein guter Tipp ist path.delimiter so etwas wie path.join zu verwenden.
Von Mikaelbr/Gulp-Notify#90 (Kommentar)
Sie können es zum Laufen bringen, indem Sie an System> Benachrichtigungen und Aktionen gehen. In der "Toast" -App müssen Banner aktiviert sein. (Sie können Banner aktivieren, indem Sie auf die App "Toast" klicken und die "Benachrichtigungsbanner anzeigen" auf ON festlegen.)
Windows 10 Herbst -Ersteller Update (Version 1709) Hinweis:
Snoretoast wird verwendet, um native Windows -Toasts zu erhalten!
Das Standardverhalten besteht darin, den zugrunde liegenden Toaster -Applikat als appID zu haben. Dies funktioniert wie erwartet, zeigt jedoch SnoreToast als Text in der Benachrichtigung.
Nach dem Update des Herbst -Erstellers funktionieren Benachrichtigungen unter Windows 10 nur wie erwartet, wenn ein gültiger appID angegeben ist. Ihr appID muss genau den gleichen Wert haben, der während der Installation Ihrer App registriert wurde.
Sie finden die ID Ihrer App, indem Sie die Registrierung nach dem appID suchen, den Sie bei der Installation Ihrer App angegeben haben. Zum Beispiel: Wenn Sie das Squirrel -Framework verwenden, ist Ihr appID so etwas wie 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
} ) ;Weitere Informationen zur Verwendung von Wachstum finden Sie in der Verwendung.
WindowsBalloon Für frühere Windows -Versionen werden Taskleistenballons verwendet (es sei denn, Fallback wird aktiviert und das Growl wird ausgeführt). Der Ballons Notifier verwendet ein großartiges Projekt namens 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 ) ;
}
) ; Siehe vollständige Verwendung auf der Projekt -Homepage: notifu .
NotifySend HINWEIS: notify-send unterstützt das wait nicht.
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
} ) ; Siehe Flaggen und Optionen auf der Mannseite notify-send(1)
node-notifier wird durch Open-Source-Software ermöglicht. Ein ganz besonderes Dankeschön an alle node-notifier der Module.
terminal-notifierSnoretoastnotifugrowlySiehe dieses Problem von Araxeus.
SnoreToast Text Siehe Hinweis zu "Windows 10 Fall Creators Update" im Windows -Abschnitt. Kurze Antwort: Aktualisieren Sie Ihre appID .
Wenn Sie keine Benachrichtigungen innerhalb von WSL2 sehen, müssen Sie möglicherweise die Erlaubnis von EXE -Anbieterdateien (Snoretoast) ändern. Weitere Informationen finden Sie unter Ausgabe
Bei Verwendung node-notifier innerhalb einer TMUX-Sitzung kann dies zu einem Hang im System führen. Dies kann gelöst werden, indem die in diesem Kommentar beschriebenen Schritte befolgt werden
Hier gibt es noch weitere Informationen #61 (Kommentar).
Selbst wenn Sie ein Symbol im Konfigurationsobjekt für node-notifier definieren, sehen Sie in der Benachrichtigung ein kleines Terminal-Symbol (siehe Beispiel oben in diesem Dokument).
Auf diese Weise funktionieren Benachrichtigungen über MacOS. Sie zeigen immer die Ikone der übergeordneten Anwendung, die die Benachrichtigung initiiert. Für node-notifier ist der terminal-notifier der Initiator, und es hat das terminale Symbol als Ikone definiert.
Um Ihr benutzerdefiniertes Symbol zu definieren, müssen Sie terminal-notifier für die Anlage für Ihre benutzerdefinierte Version mit Ihrem Symbol erstellen.
Weitere Informationen #71 finden Sie in Ausgabe Nr. 71.
Wenn Sie Ihre Elektronen-App als asar verpackt, wird node-notifier nicht geladen.
Aufgrund der Art und Weise, wie ASAR funktioniert, können Sie keine Binärdatei innerhalb eines asar ausführen. Als einfache Lösung stellen Sie beim Verpacken der App in einen ASAR sicher, dass Sie den vendor/ den Ordner des node-notifier --unpack , sodass das Modul weiterhin Zugriff auf die Benachrichtigungsbinärdateien hat.
Sie können dies mit dem folgenden Befehl tun:
asar pack . app.asar --unpack " ./node_modules/node-notifier/vendor/** " Oder wenn Sie electron-builder verwenden, ohne ASAR direkt zu verwenden, fügen Sie build Objekt in Ihr package.json wie unten:
...
build: {
asarUnpack: [
' ./node_modules/node-notifier/**/* ' ,
]
},
...Für Probleme mit dem PKG -Modul. Überprüfen Sie diese Ausgabe: #220 (Kommentar)
Wenn Sie node-notifier innerhalb von webpack verwenden, müssen Sie das unten stehende Snippet zu Ihrem webpack.config.js hinzufügen.
Dies ist notwendig, da node-notifier die Benachrichtigungen aus einem Binärer lädt, sodass sie einen relativen Dateipfad benötigt. Wenn WebPack die Module kompiliert, unterdrückt es Dateiverzeichnisse, wodurch node-notifier auf bestimmten Plattformen nicht fehlerhaft ist.
Um dies zu beheben, können Sie WebPack so konfigurieren, dass die relativen Dateiverzeichnisse aufbewahrt werden. Tun Sie dies an, indem Sie den folgenden Code an Ihren webpack.config.js anhängen:
node: {
__filename : true ,
__dirname : true
} Dieses Paket ist mit der MIT -Lizenz lizenziert.
Snoretoast und Notifu haben Lizenzen in ihren verwendeten Versionen, die nicht mit der MIT-Lizenz LGPL-3 und BSD 3-Klausel übereinstimmen, um spezifisch zu sein. Wir sind keine Anwälte, sondern haben unsere besten Anstrengungen unternommen, um die Bedingungen dieser Lizenzen zu entsprechen, während wir dieses Paket mithilfe der von uns ausgewählten Lizenz veröffentlichen.