Node-notifier
Gửi thông báo native trên nhiều nền tảng bằng Node.js. Trung tâm Thông báo cho macOS, notify-osd
/libnotify-bin
cho Linux, Toasters cho Windows 8/10, hoặc taskbar balloons cho các phiên bản Windows trước. Growl được sử dụng nếu không đáp ứng được các yêu cầu này. Hoạt động tốt với Electron.
Ví dụ đầu vào Trung tâm Thông báo macOS
Ví dụ hành động SnoreToast Windows
Sử dụng Nhanh
Hiển thị thông báo native trên macOS, Windows, Linux:
const notifier = require('node-notifier');
// String
notifier.notify('Message');
// Object
notifier.notify({
title: 'My notification',
message: 'Hello, there!'
});
Yêu cầu
- macOS : >= 10.8 để sử dụng thông báo native, hoặc Growl nếu phiên bản trước hơn.
- Linux : Cài đặt
notify-osd
hoặclibnotify-bin
(Ubuntu nên có sẵn điều này theo mặc định) - Windows : >= 8, hoặc task bar balloons cho Windows < 8. Growl được sử dụng khi không đáp ứng được yêu cầu. Growl được ưu tiên hơn so với các balloon của Windows.
- Fallback chung : Growl
Xem tài liệu và sơ đồ luồng cho việc lựa chọn báo cáo viên.
Cài đặt
npm install --save node-notifier
CLI
CLI đã được chuyển sang dự án riêng: https://github.com/mikaelbr/node-notifier-cli
Sử dụng Nâng cao Trên Nhiều Nền tảng
Sử dụng tiêu chuẩn, với sự sao chép trên nhiều nền tảng như được định nghĩa trong sơ đồ luồng của báo cáo viên. Tất cả các tùy chọn dưới đây sẽ hoạt động một cách nào đó trên hầu hết các nền tảng.
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
});
Nếu bạn muốn kiểm soát cụ thể, bạn có thể tùy chỉnh từng báo cáo viên một cách riêng lẻ, cho phép bạn điều chỉnh các tùy chọn cụ thể cho các hệ thống khác nhau.
Xem phần tài liệu dưới đây về mỗi báo cáo viên.
Ví dụ:
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();
Hoặc, nếu bạn đang sử dụng nhiều báo cáo viên (hoặc bạn lười):
// 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);
Nội dung
- Tài liệu Trung tâm Thông báo
- Tài liệu Windows Toaster
- Tài liệu Windows Balloon
- Tài liệu Growl
- Tài liệu Notify-send
Sử dụng: NotificationCenter
Sử dụng và cài đặt tham số giống như terminal-notifier.
Trung tâm Thông báo native yêu cầu phiên bản macOS 10.8 trở lên. Nếu bạn có phiên bản cũ hơn, Growl sẽ là tùy chọn dự phòng. Nếu không cài đặt Growl, một lỗi sẽ được trả về trong gọi lại.
Ví dụ
Bởi vì node-notifier
bao quanh terminal-notifier, bạn có thể thực hiện bất cứ điều gì terminal-notifier
có thể, chỉ cần truyền thuộc tính vào phương thức notify
.
Ví dụ:
- nếu
terminal-notifier
nói-message
, bạn có thể dùng{message: 'Foo'}
- nếu
terminal-notifier
nói-list ALL
, bạn có thể dùng{list: 'ALL'}
.
Thông báo là trọng tâm chính của mô-đun này, vì vậy danh sách và kích hoạt hoạt động, nhưng chúng không được tài liệu hóa.
Tất cả các tùy chọn thông báo với giá trị mặc định của chúng:
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);
}
);
Lưu ý: Tùy chọn wait
là viết tắt cho timeout: 5
. Điều này chỉ đặt một thời gian chờ là 5 giây. Điều này không làm cho thông báo dính tại chỗ!
Từ phiên bản 6.0 trở đi, đã được đặt mặc định timeout
là 10
để đảm bảo ứng dụng đóng cửa đúng cách. Để loại bỏ timeout
và có thông báo đóng ngay lập tức (không hỗ trợ hành động), đặt timeout
thành false
. Nếu bạn đang sử dụng action
, nên đặt timeout
thành giá trị lớn để đảm bảo người dùng có thời gian phản hồi.
Ngoại lệ: Nếu reply
được xác định, đề nghị đặt timeout
thành giá trị lớn hoặc hoàn toàn không có.
Đối với thông báo macOS:**icon**
,**contentImage**
, và tất cả các dạng của**reply**
/**actions**
yêu cầu macOS 10.9.
Cảm ơn bạn!
Âm thanh có thể thuộc một trong những loại sau: Basso
, Blow
, Bottle
, Frog
, Funk
, Glass
, Hero
, Morse
, Ping
, Pop
, Purr
, Sosumi
, Submarine
, Tink
.
Nếu sound
chỉ đơn giản là true
, thì sẽ sử dụng Bottle
.
Xem thêm:
- Ví dụ: Trung tâm Thông báo cụ thể
- Ví dụ: đầu vào.
Rõ ràng về Đường dẫn tùy chỉnh
customPath
có giá trị là đường dẫn tương đối hoặc tuyệt đối tới tệp nhị phân của phiên bản tuỳ chỉnh/fork của bạn của **terminal-notifier**
.
Ví dụ: ./vendor/mac.noindex/terminal-notifier.app/Contents/MacOS/terminal-notifier
Rõ ràng về Spotlight
terminal-notifier.app
nằm trong thư mục mac.noindex
để ngăn Spotlight từ việc chỉ mục ứng dụng.
Cách sử dụng: WindowsToaster
Chú ý: Có một số giới hạn cho hình ảnh trong thông báo Windows 8 native:
- Hình ảnh phải là hình ảnh PNG
- Hình ảnh phải nhỏ hơn 1024×1024 px
- Hình ảnh phải nhỏ hơn 200kb
- Hình ảnh phải được chỉ định bằng đường dẫn tuyệt đối
Những giới hạn này xuất phát từ hệ thống thông báo Toast. Một mẹo tốt là sử dụng path.join
hoặc path.delimiter
để giữ cho đường dẫn của bạn đa nền tảng.
Từ mikaelbr/gulp-notify#90 (comment)
Bạn có thể làm cho nó hoạt động bằng cách đi tới Hệ thống > Thông báo & Hành động. Ứng dụng ‘toast’ cần được kích hoạt Banners. (Bạn có thể kích hoạt bằng cách nhấp vào ứng dụng ‘toast’ và đặt ‘Hiển thị biểu ngữ thông báo’ thành Bật)
Lưu ý về Windows 10 Fall Creators Update (Phiên bản 1709):
Snoretoast được sử dụng để nhận thông báo Toast Windows native!
Hành vi mặc định là sử dụng ứng dụng phát bánh mì dưới dạng appID
. Điều này hoạt động như mong đợi, nhưng hiển thị SnoreToast
như văn bản trong thông báo.
Với Bản cập nhật Người tạo Mùa thu, Thông báo trên Windows 10 sẽ chỉ hoạt động như mong đợi nếu có một appID
hợp lệ được chỉ định. appID
của bạn phải giống hệt giá trị đã được đăng ký trong quá trình cài đặt ứng dụng của bạn.
Bạn có thể tìm ID của ứng dụng của bạn bằng cách tìm trong registry theo appID
bạn đã chỉ định trong quá trình cài đặt ứng dụng của bạn. Ví dụ: Nếu bạn sử dụng khung làm việc squirrel, appID
của bạn sẽ là một cái gì đó như com.squirrel.ungdungcua ban
.
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);
}
);
Sử dụng: 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
});
Xem thêm thông tin về việc sử dụng growly.
Sử dụng: WindowsBalloon
Đối với các phiên bản Windows trước, các bong bóng thanh công việc được sử dụng (trừ khi kích hoạt phục hồi và Growl đang chạy). Trình thông báo bong bóng sử dụng một dự án tuyệt vời được gọi là 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);
}
);
Xem toàn bộ cách sử dụng tại project homepage: notifu.
Sử dụng: NotifySend
Lưu ý: notify-send
không hỗ trợ cờ 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
});
Xem các cờ và tùy chọn trên trang man notify-send(1).
Cảm ơn OSS
node-notifier
được thực hiện nhờ vào Phần mềm Mã nguồn Mở. Một lời cảm ơn đặc biệt đến tất cả các mô-đun mà node-notifier
sử dụng.
Vấn đề Thông thường
Cách sử dụng SnoreToast với cả appID và các hoạt động
Windows: Văn bản SnoreToast
Xem lưu ý về “Bản cập nhật Người tạo Mùa thu của Windows 10” trong phần Windows. Đáp án ngắn: cập nhật _appID_
của bạn..
Windows và WSL2
Nếu bạn không thấy thông báo trong WSL2, bạn có thể phải thay đổi quyền của các tệp tin nhà cung cấp exe (snoreToast). See issue for more info
Sử dụng trong phiên tmux
Khi sử dụng node-notifier
trong phiên tmux, có thể gây tình trạng treo hệ thống. Vấn đề này có thể được giải quyết bằng cách làm theo các bước mô tả tại this comment
Thậm chí còn có thông tin thêm here https://github.com/mikaelbr/node-notifier/issues/61#issuecomment-163560801.
macOS: Biểu tượng tùy chỉnh mà không có biểu tượng Terminal
Ngay cả khi bạn xác định một biểu tượng trong đối tượng cấu hình cho node-notifier
, bạn sẽ thấy một biểu tượng Terminal nhỏ trong thông báo (xem ví dụ ở đầu tài liệu này).
Đây là cách thông báo trên macOS hoạt động. Họ luôn hiển thị biểu tượng của ứng dụng chủ mẫu khởi tạo thông báo. Đối với node-notifier
, terminal-notifier
là người khởi tạo, và nó đã xác định biểu tượng Terminal là biểu tượng của nó.
Để xác định biểu tượng tùy chỉnh của bạn, bạn cần phải sao chép terminal-notifier
và xây dựng phiên bản tùy chỉnh của bạn với biểu tượng của bạn.
Xem Issue #71 for more info https://github.com/mikaelbr/node-notifier/issues/71.
Trong quá trình Đóng gói Electron
Nếu bạn đóng gói ứng dụng Electron của mình như một tệp asar
, bạn sẽ thấy node-notifier
sẽ không thể tải.
Do cách thức hoạt động của asar, bạn không thể thực thi một tệp nhị phân từ trong một tệp asar
. Là một giải pháp đơn giản, khi đóng gói ứng dụng thành một tệp asar, hãy chắc chắn bạn --unpack
thư mục vendor/
của node-notifier
, để mô-đun vẫn có quyền truy cập vào các tệp nhị phân thông báo.
Bạn có thể thực hiện điều này bằng lệnh sau:
asar pack . app.asar --unpack "./node_modules/node-notifier/vendor/**"
Hoặc nếu bạn sử dụng electron-builder
mà không sử dụng asar trực tiếp, hãy thêm đối tượng build
vào package.json
của bạn như dưới đây:
...
build: {
asarUnpack: [
'./node_modules/node-notifier/**/*',
]
},
...
Sử dụng với pkg
Đối với các vấn đề khi sử dụng mô-đun pkg. Kiểm tra vấn đề này tại: https://github.com/mikaelbr/node-notifier/issues/220#issuecomment-425963752
Sử dụng với Webpack
Khi sử dụng node-notifier
trong webpack
, bạn phải thêm đoạn mã dưới đây vào webpack.config.js
của bạn.
Điều này cần thiết vì node-notifier
tải các trình thông báo từ một tệp nhị phân, nên nó cần một đường dẫn tệp tương đối. Khi webpack biên dịch các mô-đun, nó tắt các thư mục tệp, gây ra lỗi cho node-notifier
trên một số nền tảng cụ thể.
Để khắc phục điều này, bạn có thể cấu hình webpack để giữ lại các thư mục tệp tương đối. Làm như vậy bằng cách thêm mã sau vào webpack.config.js
của bạn:
node: {
__filename: true,
__dirname: true
}
Chi tiết Tải về:
Tác giả: Mikaelbr
Mã nguồn: https://github.com/mikaelbr/node-notifier
Giấy phép: MIT license