2016-04-12 16 views
1

Electrify(Electron-Packager拡張)を使用してMeteorアプリケーションをパッケージ化しています。ノードモジュールのパスはWindowsが受け入れるには余りにも深いので、パッケージオプションとして '--asar = true'を追加しました。電子パッケージ - ASARファイルエラー

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ファイルの読み込みに問題があるようです:私は私のパッケージ化アプリを起動しようとすると

は今、私は次のエラーを取得します。あなたはこれを解決する方法を知っていますか?

答えて

0

この種のエラーになります。アプリケーションにネイティブモジュールが含まれている場合に発生します。ネイティブモジュールでは、アプリケーションが構築されているOS固有のノードに対してコンパイルが必要です。したがって、ASARに圧縮している間は、プロジェクトに含まれるネイティブモジュールを除外する必要があります。これはパッケージ全体のオプションの 'asar'オプションの中のunpackDirオプションで行います。例えば、私のゴクゴクビルドで私はこのような何かを:

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}のようなことをして、プロジェクトが使用するネイティブにコンパイルされたパッケージ(例えば、libxml-xsdlibxmljs-mtnslogなど)を含むディレクトリのファイルグロブで、config.electroncompiled変数を置き換えるだけです。希望は意味をなさない。