javascript - Express Electron 不能需要本地 Js 文件
问题描述
在标记为重复之前,我搜索了很多,但找不到我需要的答案。
我在使用 express 和电子时遇到了一些问题。我运行时一切正常npm start
(在is中启动脚本)。在使用. 它为 windows x-64 构建项目并在 dist 文件夹中创建文件。在我想运行可执行应用程序之前,一切看起来都很好。出现这个对话框:package.json
electron .
electron-builder
.exe
我做了很多搜索,但我无法找出问题所在。实际问题是,电子在构建后无法以某种方式需要本地 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 可能没有随安装包一起提供你的文件。尝试将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
将默认路径作为应用程序的根目录。
推荐阅读
- c++ - 为什么模板特化需要内联定义?
- azure-data-factory - 使用 Azure 数据工厂从 HTTPS Web 服务读取 API 数据
- database - 当一个表可以与多个父级连接时,最好的方法是什么
- php - 将 SQL 查询转换为 Laravel Eloquent
- javascript - 在网站上播放多个不同音乐文件的能力
- android - 如何使用带有自定义入口点的 FlutterFragment 在我的 Android 应用程序中嵌入 Flutter 布局?
- android - 依赖失败:Google Play 服务库依赖依赖于另一个确切版本,但未解析为该版本
- python - 加速循环 Matplotlib
- typescript - 如何在打字稿中将字符串转换为日期格式?
- python - 如何从烧瓶中的中间件(app.before_request())返回烧瓶响应?