我目前正试图找到一种方法来整合第三方网址,如迪士尼+或spotify,到我的应用程序。我很快发现这是不可能的iframe
,因为许多网站都阻止它。我的下一个想法是使用Electron's
webview
标签。然而,这已经贬值。
现在我有了将Electron的BrowserWindow
集成到React Dom中的想法。
https://medium.com/folkdevelopers/the-ultimate-guide-to-electron-with-react-8df8d73f4c97
如果我按照此指南导入所有内容,则会出现此错误。
App.tsx:2 Uncaught TypeError: window.require is not a function
我知道这是typescript .. require ...不是一个解决方案。但是import不能很好地工作。我也试着构建一个普通的javascript应用程序只是为了测试它,但是效果不是很好。
我也确信,即使我得到了正确的导入,我应该得到一个constructor error
。有人有这个问题的经验,可以请帮助我。
电子电源
import { app, BrowserWindow } from 'electron'
import * as path from 'path'
import installExtension, {
REACT_DEVELOPER_TOOLS,
} from 'electron-devtools-installer'
function createWindow() {
const win = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
// contextIsolation: false,
preload: path.join(__dirname, 'preload.js'),
},
})
if (app.isPackaged) {
// 'build/index.html'
win.loadURL(`file://${__dirname}/../index.html`)
} else {
win.loadURL('http://localhost:3000/index.html')
win.webContents.openDevTools()
// Hot Reloading on 'node_modules/.bin/electronPath'
require('electron-reload')(__dirname, {
electron: path.join(
__dirname,
'..',
'..',
'node_modules',
'.bin',
'electron' + (process.platform === 'win32' ? '.cmd' : '')
),
forceHardReset: true,
hardResetMethod: 'exit',
})
}
}
app.whenReady().then(() => {
// DevTools
installExtension(REACT_DEVELOPER_TOOLS)
.then((name) => console.log(`Added Extension: ${name}`))
.catch((err) => console.log('An error occurred: ', err))
createWindow()
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow()
}
})
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit()
}
})
})
App.tsx
import './App.css'
const electron = window.require('electron')
const remote = electron.remote
const { BrowserWindow } = remote
function App() {
return (
<div className='App'>
<h1>halllo</h1>
<button
onClick={() => {
let win = new BrowserWindow()
win.loadURL('https://www.electronjs.org/docs/api/remote')
}}
>
Open BrowserWindowss
</button>
</div>
)
}
export default App
Reacttsconfig.json
{
"compilerOptions": {
"target": "es5",
"lib": [
"dom",
"dom.iterable",
"esnext"
],
"allowJs": true,
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"outDir": "../build", // Output transpiled files to build/electron/
"forceConsistentCasingInFileNames": true,
"noFallthroughCasesInSwitch": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx"
},
"include": [
"src"
]
}
2条答案
按热度按时间8cdiaqws1#
在main.ts中:
vi4fp9gy2#
我正在使用这个,它工作正常:
它在
main.ts
中使用require
,但在React代码中使用import
。它使用
import
意味着所需的模块在构建时由Webpack包含在渲染器包中,而不是在运行时从Node.js
环境中加载。它根本不使用
window.require
(所以,据我所知没有问题)。或者是这样的(我没有使用):
它讲述了如何使用
window.require
我们需要使用
window.require
导入ipcRenderer模块,因为我们希望在运行时从节点环境中获取electron,而不是webpack在编译时使用的electron。我不知道它为什么要在运行时而不是编译时要求。
它链接到此问题,该问题已关闭,有93条评论: