Express Electron 不能要求本地 Js 文件
Express Electron Cannot Require Local Js Files
在标记为重复之前,我已经搜索了很多,但找不到我需要的答案。
我在使用 express 和 electron 时遇到一些问题。当我 运行 npm start
(package.json
中的 start 脚本是 electron .
时,一切正常。使用 electron-builder
构建电子后出现问题。它为 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("./whatever")
这样的相对路径要求
并没有什么不同。
Electron 可能没有将您的文件与安装包一起发送。尝试将 extraFiles 字段添加到您的 package.json
因此,在您的 package.json
和 build
字段中,添加:
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
将默认路径作为应用程序的根目录。
在标记为重复之前,我已经搜索了很多,但找不到我需要的答案。
我在使用 express 和 electron 时遇到一些问题。当我 运行 npm start
(package.json
中的 start 脚本是 electron .
时,一切正常。使用 electron-builder
构建电子后出现问题。它为 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("./whatever")
这样的相对路径要求
并没有什么不同。
Electron 可能没有将您的文件与安装包一起发送。尝试将 extraFiles 字段添加到您的 package.json
因此,在您的 package.json
和 build
字段中,添加:
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
将默认路径作为应用程序的根目录。