gpt4 book ai didi

javascript - [Electron + React] 项目中 [node_notifier] 的问题

转载 作者:行者123 更新时间:2023-12-03 12:20:26 25 4
gpt4 key购买 nike

我决定使用 node_notifier处理我的 Electron 应用程序的操作系统通知。整个项目基于 Electron JSReact JSpackage.json 是这样的。

{
...

"build": {
"appId": "pod.talk.land"
},
"main": "public/electron.js",
"homepage": "./",
"dependencies": {
"cross-env": "^6.0.0",
"electron-is-dev": "^1.1.0",
"node-notifier": "^6.0.0",
"podauth": "^1.2.4",
"podchatweb": "^0.48.2",
"react": "^16.9.0",
"react-dom": "^16.9.0",
"react-scripts": "3.1.2"
},
"scripts": {
"release": "yarn react-build && electron-builder --publish=always",
"build": "yarn react-build && yarn electron-build",
"start": "concurrently \"cross-env BROWSER=none yarn react-start\" \"wait-on http://localhost:3000 && electron .\""
},
"devDependencies": {
"concurrently": "^4.1.2",
"electron": "^6.0.10",
"electron-builder": "^21.2.0",
"wait-on": "^3.3.0"
}
}

项目树结构如下所示:

- Project
| + node_modules
|
| - public
| | + assets
| | * electron.js
| | * index.html
|
| - src
| | * App.js
| | * App.css
| | * index.js
|
| * package.json

问题是,当我尝试在 App.js 中使用 node_notifier 时,如下所示:

const notifier = require('node-notifier');

notifier.notify('Some Notification');

它抛出一个错误并说:

TypeError: net.connect is not a function
at push../node_modules/node-notifier/lib/checkGrowl.js.module.exports (checkGrowl.js:14)
at Growl.push../node_modules/node-notifier/notifiers/growl.js.Growl.notify (growl.js:70)
at onNewMessage (App.js:40)
at t.value (index.js:11702)
at commitLifeCycles (react-dom.development.js:21157)
at commitLayoutEffects (react-dom.development.js:24138)
at HTMLUnknownElement.callCallback (react-dom.development.js:363)
at Object.invokeGuardedCallbackDev (react-dom.development.js:412)
at invokeGuardedCallback (react-dom.development.js:466)
at commitRootImpl (react-dom.development.js:23903)
at unstable_runWithPriority (scheduler.development.js:674)
at runWithPriority$2 (react-dom.development.js:11834)
at commitRoot (react-dom.development.js:23723)
at runRootCallback (react-dom.development.js:22809)
at react-dom.development.js:11886
at unstable_runWithPriority (scheduler.development.js:674)
at runWithPriority$2 (react-dom.development.js:11834)
at flushSyncCallbackQueueImpl (react-dom.development.js:11881)
at flushSyncCallbackQueue (react-dom.development.js:11869)
at scheduleUpdateOnFiber (react-dom.development.js:22667)
at Object.enqueueSetState (react-dom.development.js:13710)
at l.b.setState (index.js:38267)
at l.onStateChange (index.js:2630)
at g (index.js:18791)
at index.js:43241
at index.js:147155
at dispatch (index.js:18928)
at e.onMessageEvents (index.js:6864)
at Object.ad7ed17e-d748-476c-9fbf-70153cf3f50f (index.js:123573)
at fireEvent (index.js:126717)
at newMessageHandler (index.js:125444)
at chatMessageHandler (index.js:124885)
at receivedAsyncMessageHandler (index.js:124870)
at Object.0d539f41-9266-4489-e794-c3b154d86521 (index.js:124458)
at Z (index.js:128606)
at U (index.js:128520)
at Object.message (index.js:128451)
at WebSocket.r.onmessage (index.js:128722)

包作者在他的项目的问题部分提到了这一点:

This seems like being run from Webpack or something similar? Inside either electron or on a page. In any case, node-notifier needs to be run in a node-context, having access to child processes.

我应该如何在节点上下文中运行和构建代码? 🙄

最佳答案

您可以在创建主浏览器窗口时使用 webPreferences 中的 preload 参数。在 main.js 中,

  mainWindow = new BrowserWindow({
webPreferences: {
nodeIntegration: false,
preload: path.join(__dirname, 'preload.js')
}
})

在 preload.js 中

   window.notify= function notify(msg) {
return require('node-notifier').notify(msg);
};

通过这种方式,您可以避免在您的 React 项目中弹出 webpack 并访问 electron/node 函数。

关于javascript - [Electron + React] 项目中 [node_notifier] 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58161670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com