簡體   English   中英

Express Electron 不能要求本地Js文件

[英]Express Electron Cannot Require Local Js Files

在標記為重復之前,我已經搜索了很多,但找不到我需要的答案。

我在使用 express 和 electron 時遇到了一些問題。當我運行npm start時一切正常( electron.中的啟動腳本是package.json )。 使用electron-builder electron 后出現問題。 它為 windows x-64 構建項目,並在 dist 文件夾中生成.exe文件。 在我想要運行可執行應用程序之前,一切看起來都很好。 出現此對話框:

電子錯誤對話框

我做了很多搜索,但找不到問題所在。 實際問題是 electron 在構建后無法要求本地 js 文件。 我在構建過程中嘗試了 asar true 和 false。

這是我的項目樹:

 app
 ├── node_modules
 │   └── ...
 ├── Controllers
 │   ├── baseController.js
 │   └── homeController.js
 ├── Database
 │   ├── journals.json
 │   └── users.json
 ├── Models
 │   ├── Journal.js
 │   ├── User.js
 │   └── index.js
 ├── Repository
 │   ├── motor
 │   |   ├── generator.js
 │   |   └── index.js
 │   ├── core
 │   |   └── index.js
 │   ├── init.js
 │   └── index.js
 ├── Views
 │   └── index.html
 ├── www
 │   └── assets
 │       └── images
 │           └── ...
 ├── app.js
 ├── package.json
 ├── package-lock.json
 ├── startup.js
 └── server.js

這是我的app.js

const path = require('path');
const server = require(path.join(__dirname, 'server'));
const port = 7970;
const electron = require('electron');
const url = require('url');
const { app, BrowserWindow, Menu } = electron;
let index;

// App Ready
app.allowRendererProcessReuse = false;
app.on('ready', function () {
    index = new BrowserWindow({
        webPreferences: {
            nodeIntegration: true,
            nodeIntegrationInWorker: true,
            nodeIntegrationInSubFrames: true,
            contextIsolation: false,
            enableRemoteModule: true
        },
        frame: true,
        minimizable: false,
        maximizable: false,
        fullscreen: false,
        resizable: false,
        movable: true
    });
    index.loadURL(url.format({
        pathname: path.join("localhost:" + port),
        protocol: 'http:',
        slashes: true
    }));
    Menu.setApplicationMenu(null);
});

這是startup.js ,錯誤實際上是在堆棧跟蹤中開始的:

const path = require('path');
var express = require('express');
var router = express.Router();
var controllers = require(path.join(__dirname, '/Controllers/baseController'));

router.get('/', controllers.home.index)

module.exports = router;

我已經嘗試過 require 和require("./whatever")之類的相對路徑,但沒有什么不同。

Electron 可能不會隨安裝 package 一起運送您的文件。嘗試將extraFiles字段添加到您的package.json

因此,在您的package.jsonbuild字段中,添加以下內容:

build:{
    "appId":"your.product.id",
     ...
    "extraFiles":[
        {
            "from":"Controllers",
            "to":"resources/app/Controllers",
            "filter":["**/*"]
        },
        {
            "from":"Database",
            "to":"resources/app/Database",
            "filter":["**/*"]
        },
        {
            "from":"Models",
            "to":"resources/app/Models",
            "filter":["**/*"]
        },
        {
            "from":"Repository",
            "to":"resources/app/Repository",
            "filter":["**/*"]
        },
        {
            "from":"Views",
            "to":"resources/app/Views",
            "filter":["**/*"]
        },
        {/** You can add more if you need*/}
    ]
}

Electron,默認情況下,在構建時忽略所有 devDependencies 和“新”文件。 extraFiles字段可防止 electron-builder 忽略應用程序執行所必需的文件。 它實際上將位於from字段中的文件to字段中的路徑中。 filter用於在必要時使用擴展名或內部目錄保留一些文件。

extraFiles將默認路徑作為您應用程序的根目錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM