Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >电子:无法加载预加载脚本: Resources/app.asar/src/preload.js

电子:无法加载预加载脚本: Resources/app.asar/src/preload.js
EN

Stack Overflow用户
提问于 2021-11-30 11:58:45
回答 3查看 1.1K关注 0票数 3

我有一个在开发中构建和运行的电子应用程序,但是当用电子生成器打包应用程序时,预加载脚本没有打包在正确的位置。

这是一个有很好记录的问题,例如这里这里有非常相似的问题,但在我的案例中,没有一个回答或解决方案有效。

从我的electron.js文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function createWindow() {
    const mainWindow = new BrowserWindow({
        width: 800,
        height: 600,
        webPreferences: {
            preload: path.join(app.getAppPath(), 'src/preload.js'),
            contextIsolation: true,
        },
    });

    // In production, set the initial browser path to the local bundle generated
    // by the Create React App build process.
    // In development, set it to localhost to allow live/hot-reloading.
    const appURL = app.isPackaged
        ? url.format({
            pathname: path.join(__dirname, 'index.html'),
            protocol: 'file:',
            slashes: true,
        })
        : 'http://localhost:3000';
    mainWindow.loadURL(appURL);

    mainWindow.webContents.openDevTools();
}

我的预加载脚本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const { contextBridge, shell } = require('electron')

contextBridge.exposeInMainWorld(
    'electron',
    {
        openBrowserWindow: (url) => shell.openExternal(url)
    }
)

我的电子应用程序package.json:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    "build": {
        "extends": null,
        "appId": "com.app",
        "productName": "App",
        "directories": {
            "output": "dist"
        },
        "mac": {
            "target": {
                "target": "pkg",
                "arch": [
                    "universal"
                ]
            },
            "darkModeSupport": "true",
            "extendInfo": "app"
        },
        "pkg": {
            "installLocation": "/Applications",
            "overwriteAction": "upgrade"
        },
        "files": [
            "**",
            "../app/src/*",
            "src/preload.js"
        ],
        "extraResources": [
            "../app/src/*",
            "src/preload.js"
        ],
        "extraFiles": [
            "../app/src/*",
            "src/preload.js"
        ]
    }

上面,我试图确保以不同的方式复制"src/preload.js“文件,但是我仍然得到了错误:

无法加载预加载脚本:...app/Contents/Resources/app.asar/src/preload.js 错误:找不到模块'...app/Contents/Resources/app.asar/src/preload.js‘

预加载脚本实际上是复制的,但它不是app.asar文件的一部分。它被复制到参考资料文件夹外的src文件夹中,该文件夹包含app.asar文件:

如何正确配置电子构建器,使该文件位于正确的位置,并可在包运行时访问?

EN

回答 3

Stack Overflow用户

发布于 2021-12-08 04:57:45

如果你这样做了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
        preload: path.resolve(app.getAppPath(), 'preload.js'),
        contextIsolation: true,
    },
});

有用吗?(曾为我工作过电子webpack和电子建设者)

票数 1
EN

Stack Overflow用户

发布于 2021-12-13 08:40:49

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        preload: path.join(app.getAppPath(), 'src/preload.js'),

由于您没有将preload.js打包到应用程序包文件(asar默认)中,这不会像这样工作。app.getAppPath()将指示应用程序包文件(或目录,以防您将asar设置为false)。

您的代码指示/xxx.app/Contents/Resources/app.asar/src/preload.js/xxx.app/Contents/Resources/app/src/preload.js,您的预加载脚本文件不在那里,而是在第二个父目录中。

在你的情况下,这是正确的道路,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
path.join(app.getAppPath(), '..', '..', 'src', 'preload.js');
票数 1
EN

Stack Overflow用户

发布于 2022-10-06 07:20:05

首先,添加控制台日志进行测试。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
console.log({dirname: __dirname})
console.log({getAppPath: app.getAppPath()})
console.log({resourcesPath: process.resourcesPath})

const mainWindow = new BrowserWindow({ ... })

其次,您必须添加contextIsolation: true

如果您使用的是electron-builder,并且由于某些原因不能添加contextIsolation: true,则可以使用以下解决方法:

package.json

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  "build": {
    ...
    "extraResources": [
      ...
      "app/preload.js" // <---- add your path
    ],
  }

electron.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const preloadPath =
      process.env.NODE_ENV === 'development'
        ? path.join(__dirname, '../preload.js') // <---- add your path
        : path.join(process.resourcesPath, '/app/preload.js'); // <---- add your path

const mainWindow = new BrowserWindow({
      ...
      webPreferences: {
        contextIsolation: false,
        preload: preloadPath,
        ...
      }
})

path.join(process.resourcesPath, '/app/preload.js')是什么?

在构建应用程序之后,您可以在这里找到您的额外资源。

C:\Users\<user>\AppData\Local\Programs\<app>\resources -代表Windows

对于MacOS,您可以在应用程序上使用right click,然后单击Show Package Contents > Resources

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70175316

复制
相关文章
图片预加载和懒加载
对于前端性能来说,图片是一个过不去的坎,又想能页面美观,又想页面响应速度快,那么这时候就有了两个技术,图片懒加载和预加载。在这边我只介绍一些方法和原理,不具体把方法的代码贴出来。
wade
2020/04/24
2.8K0
前端懒加载和预加载
懒加载和预加载的目的都是为了提高用户的体验,二者行为是相反的,一个是延迟加载,另一个是提前加载。懒加载对缓解服务器压力有一定作用,预加载则会增长服务器前端压力缓存。
hellocoder2029
2022/10/21
2.2K0
图片预加载
背景 利用图片的预加载技术获得更好的用户体验 什么是有序预加载和无序预加载 jQuery插件的写法 图片预加载,预知用户将要发生的行为,提前加载用户所需的图片 网站loading页 image.png
达达前端
2019/07/16
2.3K0
图片预加载
RecyclerView预加载!
列表的内容是由服务器返回的分页数据,每次浏览到当前页的尾部,都会拉取下一页的数据。这中断用户的浏览,不免产生等待。产品希望让这个过程无感知。一种实现方案是预加载,即在一页数据还未看完时就请求下一页数据,让用户感觉列表的内容是无穷的。
用户9239674
2021/12/18
2.5K0
Angular 启用预加载
在使用路由延迟加载中,我们介绍了如何使用模块来拆分应用,在访问到这个模块的时候, Angular 加载这个模块。但这需要一点时间。在用户第一次点击的时候,会有一点延迟。
玖柒的小窝
2021/11/03
1.5K0
Angular 启用预加载
jquery预加载图片
(function($) { var cache = []; // Arguments are image paths relative to the current page. $.preLoadImages = function() { var args_len = arguments.length; for (var i = args_len; i--;) { var cacheImage = document.createElement('img');
用户8671053
2021/09/23
7.8K0
Vue 图片预加载
在媒体资源较多的情况下渲染页面,即使采用了CDN,但如果客户端受带宽限制,资源的加载会很慢。页面资源(通常是图片)加载慢会影响动画效果,甚至使页面看起来很卡顿。 为了解决这一问题,可以使用预加载的方式,在页面打开之前,提前将其所需的资源加载到浏览器缓存。 在Vue中,可以将预加载的操作放在合适的生命周期钩子函数内,比如在前一个组件挂载后就加载后一个组件所需的资源。以下是Vue3组合式api写法。
Libertyyyyy
2022/11/01
2.5K0
Gorm-预加载
预加载是一种在查询之前,先将关联的数据从数据库中加载到内存中的方式。在Gorm中,可以使用Preload方法进行预加载。
堕落飞鸟
2023/04/24
1.9K0
Typecho 通过 JS 脚本预加载提升网站访问速度
在用户点击网站链接之前,他们将鼠标悬停在该链接上。当用户徘徊65毫秒时,他们将点击该链接有两个机会,因此 instant.page 此时开始预加载,平均超过 300 毫秒,以便页面预加载。
Erwin
2020/04/02
2K0
Angular 路由配置(预加载配置,懒加载配置)
(1)RouterModule对象提供了两个静态的方法:forRoot()和forChild()来配置路由信息。
玖柒的小窝
2021/11/04
3.2K0
如何通过预加载器提升网页加载速度
预加载器(Pre-loader)可以说是提高浏览器性能最重要的举措。Mozilla 官方发布数据,通过预加载器技术网页的加载性能提升了19%,Chrome测试了 Alexa 排名前2000名网站,性能有20%的提升。 它并不是一门新技术,有人认为只有 Chrome 才具备这个功能。也有人认为它是有史以来提升浏览器性能最有效的方法。如果你第一次接触预加载器,也许心中已经有了无数个问号。什么是预加载器?它是如何提升浏览器性能的? 首先需要了解浏览器是如何加载网页的 一个网页的加载依赖于脚本文件、CSS样式文件。
葡萄城控件
2018/01/10
2.8K0
如何通过预加载器提升网页加载速度
预加载JavaScript/CSS但不执行
好吧,一个方案一个方案来分析一下(要求是不允许执行Javascript和应用CSS,以免消耗系统资源):
meteoric
2018/11/15
2K0
如何通过预加载器提升网页加载速度
预加载器(Pre-loader)可以说是提高浏览器性能最重要的举措。Mozilla 官方发布数据,通过预加载器技术网页的加载性能提升了19%,Chrome测试了 Alexa 排名前2000名网站,性能有20%的提升。 它并不是一门新技术,有人认为只有 Chrome 才具备这个功能。也有人认为它是有史以来提升浏览器性能最有效的方法。如果你第一次接触预加载器,也许心中已经有了无数个问号。什么是预加载器?它是如何提升浏览器性能的? 首先需要了解浏览器是如何加载网页的 一个网页的加载依赖于脚本文件、CSS样式文件。
wangxl
2018/03/08
2.7K0
如何通过预加载器提升网页加载速度
JS图片预加载插件
      在开发H5项目中有时候会遇到要加载大量图片的情况,利用预加载技术可以提高用户浏览时的体验。  1)概念: 懒加载也叫延迟加载:JS图片延迟加载,延迟加载图片或符合某些条件时才加载某些图片。 预加载:提前加载图片,当用户需要查看时可直接从本地缓存中渲染。 2)区别: 两种技术的本质:两者的行为是相反的,一个是提前加载,一个是迟缓甚至不加载。懒加载对服务器前端有一定的缓解压力作用,预加载则会增加服务器前端压力。 服务器端区别:懒加载的主要目的是作为服务器前端的优化,减少请求数或延迟请求数。预加载可以
用户1055830
2018/01/18
16.8K0
xml布局异步预加载
项目中针对xml布局加载,一般是使用LayoutInflate.from(context).inflate或则View.inflate来进行,其他方式则是直接new XXXView
人力鹿
2022/12/14
2.5K1
使用主题预加载背景
最近在项目中中开发天气,需要加载Lottie动画,但是第一次进入的时候会黑屏之后再进入界面。于是想了不少办法去取消黑屏,发现这是最简单的一种
雁字回时
2022/12/13
5210
4-3~8 code-splitting,懒加载,预拉取,预加载
代码分离是 webpack 中最引人注目的特性之一。此特性能够把代码分离到不同的 bundle 中,然后可以按需加载或并行加载这些文件。代码分离可以用于获取更小的 bundle,以及控制资源加载优先级,如果使用合理,会极大影响加载时间。
love丁酥酥
2020/02/25
1.6K0
4-3~8 code-splitting,懒加载,预拉取,预加载
Gravatar 头像无法加载
由于众所周知的原因,头像服务器多数都无法正常访问,不管是http还是https。为了解决头像问题有两个办法:
obaby
2023/02/22
1.6K0
Electron 介绍
​ Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium (opens new window) 和 Node.js (opens new window) 到 二进制的 Electron 允许您保持一个 JavaScript 代码代码库并创建 在Windows上运行的跨平台应用 macOS和Linux——不需要本地开发 经验。
郭顺发
2021/12/17
2.4K0
Electron 介绍
Electron框架 介绍
Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium 和 Node.js 到 二进制的 Electron 允许您保持一个 JavaScript 代码代码库并创建 在Windows上运行的跨平台应用 macOS和Linux——不需要本地开发 经验。
郭顺发
2023/07/17
5890

相似问题

具有browserWindow和preload.js的电子生成器。无法加载预加载脚本

711

电子应用:无法加载预加载脚本

11.9K

在电子和Vue中加载预加载脚本

21

<link rel=“预加载”as=“脚本”href=“.”> vs <script src=“.”/>“

15

无法从src/main/resources加载dispatcher-servlet.xml

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文