【问题标题】:Electron packaging - ASAR file error电子包装 - ASAR 文件错误
【发布时间】:2016-08-03 06:31:39
【问题描述】:

我正在使用 Electrify(通过扩展 Electron-Packager)打包 Meteor 应用程序。由于节点模块路径太深,Windows 无法接受,因此我添加了“--asar=true”作为打包选项。

现在,当我尝试启动打包的应用程序时,出现以下错误:

shell.js: internal error
Error: ENOENT: no such file or directory, mkdir 'C:\Users\myusername\MyApp\.electrify\.dist\MyApp-win32-x64\resources\app.asar\db'
    at Error (native)
    at Object.fs.mkdirSync (fs.js:799:18)
    at mkdirSyncRecursive 

...

        at Socket.g (events.js:260:16)
    module.js:338
        throw err;

读取asar文件似乎有问题。你知道有什么办法可以解决这个问题吗?

【问题讨论】:

  • 当操作系统锁定文件夹时,我遇到了这个错误。

标签: meteor electron asar


【解决方案1】:

当您在应用程序中包含本机模块时,可能会发生这种错误。本机模块需要针对构建应用程序的操作系统特定节点进行编译。因此,当您压缩到 ASAR 时,您必须排除项目中的任何本机模块。这是通过在整个打包程序选项中的 'asar' 选项中的 unpackDir 选项完成的。例如,在我的 gulp 构建中,我执行以下操作:

var gulp = require('gulp');
var $ = require('gulp-load-plugins')({lazy: true});
var config = require('./gulp.config')();
var packager = require('electron-packager');
var electronPackage = require('electron/package.json');
var electronVersion = electronPackage.version;
var pkg = require('./package.json');

// Build the electron app
gulp.task('build:electron', function(cb) {

    var opts = {
        name: pkg.name,
        platform: 'win32',
        arch: 'ia32',                           // ia32, x64 or all
        dir: config.root,                       // source location of app
        out: config.electronbuild,              // destination location for app os/native binaries
        ignore: config.electronignore,          // don't include these directories in the electron app build
        icon: config.icon,
        asar: {unpackDir: config.electroncompiled}, // compress project/modules into an asar blob but don't use asar to pack the native compiled modules
        overwrite: true,
        prune: true,
        electronVersion: electronVersion,       // Tell the packager what version of electron to build with
        'app-copyright': pkg.copyright,         // copyright info
        'app-version': pkg.version,             // The version of the application we are building
        win32metadata: {                        // Windows Only config data
            CompanyName: pkg.authors,
            ProductName: pkg.name,
            FileDescription: pkg.description,
            OriginalFilename: pkg.name + '.exe'
        }
    };

    packager(opts, function(err, appPath) {
        $.util.log(' <- packagerDone()', err, appPath);
        log(' all done!');
        cb();
    });

});

对您的情况重要的是 asar 选项的行。你想确保你做了类似 asar: {unpackDir: config.electroncompiled} 的事情,并简单地将 config.electroncompiled 变量替换为你的文件全局目录,其中包括你的项目使用的任何本机编译的包(例如 libxml-xsd、libxmljs-mt、 nslog 等)。希望这是有道理的。

【讨论】:

    猜你喜欢
    • 2019-12-03
    • 2019-10-31
    • 2021-06-01
    • 2018-04-26
    • 2018-12-03
    • 2015-08-30
    • 2016-07-29
    • 2019-03-10
    • 2016-12-28
    相关资源
    最近更新 更多