Javascript FS模块没有';电子封装后不能工作
我试图通过创建一个简单的项目来学习electron,当我使用Javascript FS模块没有';电子封装后不能工作,javascript,node.js,electron,Javascript,Node.js,Electron,我试图通过创建一个简单的项目来学习electron,当我使用npm start编写start it时,它可以工作,但是当我使用electron packager打包时,node js部分不再工作 这是主要的过程: const { app, BrowserWindow, ipcMain , globalShortcut} = require('electron'); const fs = require('fs'); let mainWindow; function createWindow
npm start
编写start it时,它可以工作,但是当我使用electron packager打包时,node js部分不再工作
这是主要的过程:
const { app, BrowserWindow, ipcMain , globalShortcut} = require('electron');
const fs = require('fs');
let mainWindow;
function createWindow () {
mainWindow = new BrowserWindow({
width: 1200,
height: 600,
webPreferences: {
nodeIntegration: true,
contextIsolation: false
}
});
mainWindow.loadFile('src/index.html');
globalShortcut.register('f5', function() {
mainWindow.reload()
})
};
app.whenReady().then(() => {
createWindow()
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow()
}
})
});
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit()
}
});
ipcMain.on("message", (event, arg) => {
const data = {
"num": arg
};
fs.writeFile('src/data.json', JSON.stringify(data), () => {
event.returnValue = "success";
})
})
这是渲染器过程:
const {ipcRenderer} = require("electron");
const saveBtn = document.getElementById('saveBtn');
const inp = document.getElementById('inp');
const fetchBtn = document.getElementById('fetchBtn');
saveBtn.onclick = () => {
if (!inp.value) return alert("Your input is empty");
if (isNaN(inp.value)) return alert("The input is not a number");
ipcRenderer.sendSync("message", inp.value);
}
fetchBtn.onclick = () => {
fetch("data.json")
.then(res => res.json())
.then(res => console.log(res.num))
}
这是package.json文件:(忽略电子锻造的东西)
而data.json文件只是一个具有num
属性和值的对象
当我使用npm start
运行程序时,我可以给出一个值并更改json文件的值,但当我使用electron packager打包应用程序时,它不起作用
也为我写的乱七八糟的代码感到抱歉。我刚刚开始学习编码。看起来您没有将
fs
指定为依赖项,因此它没有被捆绑在应用程序中。“它不工作”到底意味着什么?您是否收到任何错误和输出?BrowserWindow
是否加载您指定的HTML文件,还是应用程序根本不启动?我可以确认@spring所建议的是没有必要的。但是,您必须小心路径——打包后它们可能会有所不同。Alexander是对的。一旦我使用electron builder构建了应用程序,json文件的路径就改变了,所以我必须获得新的路径,然后它才能工作。以前,我甚至更改了代码,如果它无法写入文件,它会给出一个错误,然后将消息显示给IPC渲染器,但它没有给出任何错误,因此我再次更改代码以读取文件而不是写入文件,最后它给出了一个错误,表示路径不正确。非常感谢所有发表评论的人。这是我第一次使用stack overflow,我被这个神奇的社区所震撼。
{
"name": "electron-project",
"version": "1.0.0",
"description": "",
"main": "app.js",
"build": {
"asar": false
},
"scripts": {
"start": "electron-forge start",
"package": "electron-forge package",
"make": "electron-forge make"
},
"author": "",
"license": "ISC",
"devDependencies": {
"@electron-forge/cli": "^6.0.0-beta.54",
"@electron-forge/maker-deb": "^6.0.0-beta.54",
"@electron-forge/maker-rpm": "^6.0.0-beta.54",
"@electron-forge/maker-squirrel": "^6.0.0-beta.54",
"@electron-forge/maker-zip": "^6.0.0-beta.54",
"electron": "^12.0.2"
},
"dependencies": {
"electron-squirrel-startup": "^1.0.0"
},
"config": {
"forge": {
"packagerConfig": {},
"makers": [
{
"name": "@electron-forge/maker-squirrel",
"config": {
"name": "electron_project"
}
},
{
"name": "@electron-forge/maker-zip",
"platforms": [
"darwin"
]
},
{
"name": "@electron-forge/maker-deb",
"config": {}
},
{
"name": "@electron-forge/maker-rpm",
"config": {}
}
]
}
}
}