未捕获错误:不支持“child_process”的动态要求

问题描述 投票:0回答:1
我正在尝试创建一个“容器”应用程序,当用户单击“容器”应用程序中的按钮时,该应用程序要么下载其他应用程序(如果它们不存在),要么打开它们的 .exe 文件(如果它们确实存在)。最初,我尝试使用 .bat 文件执行 msedge.exe 文件,结果成功。

我们的团队正在使用 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;
    
reactjs dynamic electron require child-process
1个回答
0
投票
您使用的样板可能是为人们使用与节点交互的安全方法而设计的。他们希望您在预加载脚本中创建函数,并且只能通过

contextBridge

 api 访问它们。

示例:

https://www.electronjs.org/docs/latest/tutorial/context-isolation

默认方法

预加载.js

// 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()


其他方法

您可以禁用 contextBridge 并启用与节点交互的原始方法。

找到他们创建 BrowserWindow 的位置。启用节点集成和 禁用 contextIsolation 以便您可以在渲染方法中访问节点工具。如果出现错误,也请删除他们使用 contextBridge 的地方。

mainWindow = new BrowserWindow({ webPreferences: { nodeIntegration: true, contextIsolation: false, } });
这应该有效

import childProcess from 'child_process'; function App() {...
    
© www.soinside.com 2019 - 2024. All rights reserved.