#node.js #webpack #electron #chokidar
#node.js #webpack #электрон #chokidar
Вопрос:
Когда я компилирую свое электронное приложение с пакетом npm «Electron-reload». Я получил сообщение об ошибке. В настоящее время Electron-reload использует chokidar для просмотра файлов моих приложений, поэтому он может перезагрузить его при обнаружении изменения файла.
Ошибка, возникающая при компиляции моего основного процесса electron с помощью webpack :
WARNING in ./node_modules/chokidar/lib/fsevents-handler.js
Module not found: Error: Can't resolve 'fsevents' in
'C:[...]node_moduleschokidarlib'
И ошибка, которая возникает при запуске моего электронного приложения :
TypeError: Cannot read property 'filename' of undefined
at Object.eval (webpack:///./node_modules/electron-reload/main.js?:12:32)
at eval (webpack:///./node_modules/electron-reload/main.js?:86:30)
at Object../node_modules/electron-reload/main.js (C:[...]DistElectronapp.js:322:1)
at __webpack_require__ (C:[...]DistElectronapp.js:20:30)
at eval (webpack:///./Electron/app.ts?:5:5)
at Object../Electron/app.ts (C:[...]DistElectronapp.js:109:1)
at __webpack_require__ (C:[...]DistElectronapp.js:20:30)
at C:[...]DistElectronapp.js:84:18
at Object.<anonymous> (C:[...]DistElectronapp.js:87:10)
at Module._compile (internal/modules/cjs/loader.js:1145:30)
Я не могу найти ничего полезного в Интернете от Electron-reload, chokidar или webpack. Вот мой webpack.config.js
const path = require('path');
module.exports = {
mode: "development",
entry: "./Electron/app.ts",
target: "electron-main",
module: "es6",
watch: true,
stats: 'minimal',
output: {
path: path.resolve(__dirname, "./Dist/Electron/"),
filename: "app.js",
},
module: {
rules: [
{
test: /.tsx?$/,
use: 'ts-loader',
include: /Electron/,
},
]
},
resolve: {
extensions: ['.ts', '.tsx', '.js']
}
}
спасибо за вашу помощь.
Ответ №1:
Хорошо, я не решил исходную проблему. Но поскольку я хотел перезагрузить процесс рендеринга electron только при изменении файла, я нашел другой способ сделать это без «электронной перезагрузки»
Внутри функции, которая отображает мое главное окно, я добавил :
import {join} from 'path';
import {watch} from 'fs';
app.whenReady().then(()=>{
watch('./Dist/Client/', (eventType, filename)=>{ win.reload(); })
}
Теперь все работает нормально.
Комментарии:
1. Из того, что я прочитал,
watch
менее надежный, но я думаю, что я иду тем же путем…2. Да, это сработало для меня, по крайней мере, в Windows. Также будет проверяться на mac. Я не использую electron-reload, я использую chokidar напрямую.