在 NodeJS 中,我有:
const fs = require('fs');
if (!fs.existsSync("some_path")) {
...
}
Run Code Online (Sandbox Code Playgroud)
但我收到错误:
类型错误:fs.existsSync 不是函数
做一些搜索后,我读Webpack给自己带来require哪些则会覆盖node.js的require,所以当你需要一个node.js核心模块是webpack无法解析为您的文件或依赖项之一,它抛出。
(我的堆栈跟踪包括__webpack_require__)
但是我该如何解决呢?
我使用nklayman/vue-cli-plugin-electron-builder创建了一个使用 Vue/Vuex 准备的电子应用程序。它附带文件main.js,background.js包括 Vue 组件起点。但我无法让事件发挥作用。我在下面的尝试Uncaught ReferenceError: __dirname is not defined在渲染时产生(编译很好)。
组件:Splash.vue
<template>
<div @click="open">open</div>
</template>
<script>
const { ipcMain } = require('electron')
export default {
methods: {
open()
{
ipcMain.on('my-open-event', (event, arg) => {
console.log(event, arg)
})
}
}
}
</script>
Run Code Online (Sandbox Code Playgroud)
背景.js
import { app, protocol, BrowserWindow } from 'electron'
...
app.on('my-open-event', async () => {
try {
"Will call some executable here";
} catch (e) {
console.error(e)
}
})
Run Code Online (Sandbox Code Playgroud)
主文件
import …Run Code Online (Sandbox Code Playgroud) 这是我的设置:
步骤 1. 使用以下代码创建一个 preload.js 文件:
window.ipcRenderer = require('electron').ipcRenderer;
Run Code Online (Sandbox Code Playgroud)
步骤 2. 通过 webPreferences 在 main.js 中预加载此文件:
mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: false,
preload: __dirname + '/preload.js'
}
});
Run Code Online (Sandbox Code Playgroud)
步骤 3. 在渲染器中:
console.log(window.ipcRenderer); // Works!
Run Code Online (Sandbox Code Playgroud)
现在按照 Electron 的安全指南,我想转contextIsolation=true:https : //electronjs.org/docs/tutorial/security#3-enable-context-isolation-for-remote-content
步骤 2 之二。
mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
contextIsolation: true,
nodeIntegration: false,
preload: __dirname + '/preload.js'
}
});
Run Code Online (Sandbox Code Playgroud)
第 3 步之二。在渲染器中:
console.log(window.ipcRenderer); // undefined
问题:我可以在什么时候使用ipcRenderercontextIsolation=true …