首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >电子封装. ASAR文件错误

电子封装. ASAR文件错误
EN

Stack Overflow用户
提问于 2016-04-12 14:47:52
回答 1查看 2.7K关注 0票数 1

我正在包装一个流星应用程序使用电气化(推广,电子包装机)。由于节点模块路径太深,Windows无法接受,因此我添加了‘-asar=true’作为打包选项。

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

代码语言:javascript
复制
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文件时似乎有问题。你知道怎么解决这个问题吗?

EN

回答 1

Stack Overflow用户

发布于 2017-01-20 00:30:30

当您在应用程序中包含本机模块时,可能会发生这种错误。本机模块需要针对应用程序构建的操作系统特定节点进行编译。因此,在压缩到ASAR时,必须排除项目中的任何本机模块。这是用'asar‘选项中的unpackDir选项在您的总体打包器选项中完成的。例如,在我的吞咽构建中,我做了这样的事情:

代码语言:javascript
复制
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-xsdlibxmljs-mtnslog等)的目录目录。希望这是合理的。

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

https://stackoverflow.com/questions/36576763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档