我们的团队正在使用 Electron/React/Node.js/Vite,并且我们已经设置了一个样板作为启动板。我创建了一个“Deeplinker.jsx”脚本,并通过“main.tsx”渲染它。该程序运行良好并显示我的警报消息,但是,当我取消注释以下两行代码时,它会出错:
import {execFile} from 'child_process';
execFile("C:/Program Files (x86)/Microsoft/Edge/Application/msedge.exe");
这是错误消息:
未捕获错误:不支持“child_process”的动态要求 在 chunk-7FP5O474.js?v=d7119b79:7:9 在 child_process.mjs:1:50我已将错误隔离到“Deeplinker.jsx”文件中的这两行注释中。我们的网络管理员可能锁定了我们的权限,所以也许这就是我收到错误的原因。
有人可以提供建议并帮助我解决这个问题吗?这是脚本:
// main.tsx
import React from 'react'
import ReactDOM from 'react-dom/client'
import App from './App.tsx'
import DeepButton from './Deeplinker.jsx'
import './index.css'
ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(
<React.StrictMode>
<DeepButton/>
</React.StrictMode>,
)
postMessage({ payload: 'removeLoading' }, '*')
// Deeplinker.jsx
import {execFile} from 'child_process';
function DeepLink(){
alert("Button pressed");
execFile("C:/Program Files (x86)/Microsoft/Edge/Application/msedge.exe");
}
function DeepButton(){
return (
<h1>
<button onClick={DeepLink}>Deeplink</button>
</h1>);
}
export default DeepButton;
contextBridge
api 访问它们。示例:
https://www.electronjs.org/docs/latest/tutorial/context-isolation
默认方法
// preload with contextIsolation enabled
const { contextBridge } = require('electron')
contextBridge.exposeInMainWorld('myAPI', {
doAThing: () => {}
})
renderer.js(或在 React 中)
// use the exposed API in the renderer
window.myAPI.doAThing()
找到他们创建 BrowserWindow 的位置。启用节点集成和 禁用 contextIsolation 以便您可以在渲染方法中访问节点工具。如果出现错误,也请删除他们使用 contextBridge 的地方。
mainWindow = new BrowserWindow({
webPreferences: {
nodeIntegration: true,
contextIsolation: false,
}
});
这应该有效
import childProcess from 'child_process';
function App() {...