Электрон со страпоном, Не удается найти пакет модуля. json - PullRequest
0 голосов
/ 07 августа 2020

Я создал приложение, используя strapi , я пытаюсь упаковать его внутри электронов с помощью электронного построителя.

Упаковка сделана хорошо, но когда я запускаю приложение, он показывает это сообщение

PS E:\Development\DentalSystem\dentalBE_test\dist\win-unpacked>
(node:13196) UnhandledPromiseRejectionWarning: Error: Cannot find module 'E:\Development\DentalSystem\dentalBE_test\dist\win-unpacked\package.json'
Require stack:
- E:\Development\DentalSystem\dentalBE_test\dist\win-unpacked\resources\app\node_modules\strapi\lib\Strapi.js
- E:\Development\DentalSystem\dentalBE_test\dist\win-unpacked\resources\app\node_modules\strapi\lib\index.js
- E:\Development\DentalSystem\dentalBE_test\dist\win-unpacked\resources\app\index.js
-
    at Module._resolveFilename (internal/modules/cjs/loader.js:797:17)
    at Function.o._resolveFilename (electron/js2c/browser_init.js:281:679)
    at Module._load (internal/modules/cjs/loader.js:690:27)
    at Function.Module._load (electron/js2c/asar.js:769:28)
    at Module.require (internal/modules/cjs/loader.js:852:19)
    at require (internal/modules/cjs/helpers.js:74:18)
    at new Strapi (E:\Development\DentalSystem\dentalBE_test\dist\win-unpacked\resources\app\node_modules\strapi\lib\Strapi.js:94:21)
    at module.exports (E:\Development\DentalSystem\dentalBE_test\dist\win-unpacked\resources\app\node_modules\strapi\lib\Strapi.js:564:18)
    at createWindow (E:\Development\DentalSystem\dentalBE_test\dist\win-unpacked\resources\app\index.js:23:5)
(node:13196) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:13196) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

Кажется, проблема заключается в том, что мое приложение ищет файл package. json внутри папки root (непосредственно относительно файла exe), в то время как он существует внутри (app) со всеми остальными ресурсами системы.

это мой пакет. json файл

{
  "name": "DentalSys",
  "main": "./index.js",
  "version": "0.2.0",
  "description": "Dental Clinic Management System",
  "productName": "DentalSys",
  "build": {
    "appId": "com.kldoon.dentalSys",
    "asar": false    
  },
  "scripts": {
    "develop": "strapi develop",
    "strapi-start": "strapi start",
    "strapi-prod": "cross-env NODE_ENV=production npm start",
    "strapi-build": "strapi build",
    .....
  },
  "devDependencies": {
    "concurrently": "^5.1.0",
    "electron": "^9.1.2",
    "electron-builder": "^22.4.1",
    ......
  },
  "dependencies": {
    "knex": "0.20.13",
    "moment": "^2.27.0",
    "sqlite3": "^4.1.1",
    "strapi": "3.0.0-beta.17.5",
    .......
}

А это мой электронный (index. js) файл

const { app, BrowserWindow, Menu, dialog } = require('electron')
const path = require("path");

const strapi = require('strapi');
//const { exec } = require("child_process");

function createWindow() {

    // Create the browser window.
    const win = new BrowserWindow({
        maximizable: true,
        title: "Dental System",
        webPreferences: {
            nodeIntegration: true
        }
    })
    win.maximize();

    strapi().start().then(() => {
        win.loadURL('http://localhost:49862/');
    }).catch((e) => {
        console.log(e);
    });

    win.on('closed', () => {
        app.quit();
    })
}

app.whenReady().then(createWindow)

app.on('window-all-closed', () => {
    if (process.platform !== 'darwin') {
        app.quit()
    }
})

app.on('activate', () => {
    if (BrowserWindow.getAllWindows().length === 0) {
        createWindow()
    }
})

Я пробовал несколько решений, но ни одно из них не помогло, надеюсь, кто-нибудь сможет с этим помочь.

Заранее спасибо.

1 Ответ

0 голосов
/ 02 сентября 2020

Исправить оказалось легко, с опцией dir конструктора strapi

strapi({
dir: __dirname + '/'     ///<==== add this 
}).start().then(() => {
  win.loadURL('http://localhost:1337/');
}).catch((e) => {
  dialog.showMessageBox(win, { message: JSON.stringify(e) });
  console.log(e);
});
...