2016-05-25 6 views
1

私はangularCLIを使って新しいangle2アプリを作成しました(私のディレクトリ構造を知っているので)。electron + angular2 loading vendor lib

ng serveを実行すると、すべてのファイルがdistフォルダに保存され、問題なくブラウザにhello world appが実行されます。

私は電子で同じアプリケーションを実行しようとしているが、それは、スクリプトSRCにファイルプロトコルを使用しているので、(@angularを含む)すべてのベンダーファイルを見つけることができません:

この

<script src="vendor/es6-shim/es6-shim.js"></script> 
<script src="vendor/reflect-metadata/Reflect.js"></script> 
<script src="vendor/systemjs/dist/system.src.js"></script> 
<script src="vendor/zone.js/dist/zone.js"></script> 

あなたが用途を電子file:プロトコルで正しいパスを付加するにはどうすればよいこの

file:///vendor/es6-shim/es6-shim.js Failed to load resource: net::ERR_FILE_NOT_FOUND 
file:///vendor/reflect-metadata/Reflect.js Failed to load resource: net::ERR_FILE_NOT_FOUND 
file:///vendor/systemjs/dist/system.src.js Failed to load resource: net::ERR_FILE_NOT_FOUND 
file:///vendor/zone.js/dist/zone.js Failed to load resource: net::ERR_FILE_NOT_FOUND 

を生成しますか?

マイgulpfile.js

var gulp = require('gulp'), 
    del = require('del'), 
    runSeq = require('run-sequence'); 

gulp.task('clean-electron', function(){ 
    return del('dist/electron-package/**/*', {force: true}); 
}); 

gulp.task('copy:electron-manifest', function(){ 
    return gulp.src('./package.json') 
     .pipe(gulp.dest('./dist/electron-package')) 
}); 

gulp.task('copy:electron-scripts', function(){ 
    return gulp.src('./src/electron_main.js') 
     .pipe(gulp.dest('./dist/electron-package')); 
}); 

gulp.task('copy:vendor-for-electron', function() { 
    return gulp.src('./dist/vendor/**/*') 
     .pipe(gulp.dest('./dist/electron-package/vendor'))  
}); 

gulp.task('copy:spa-for-electron', function(){ 
    return gulp.src(["./dist/*.*", "./dist/app/**/*"]) 
     .pipe(gulp.dest('dist/electron-package')); 
}); 

gulp.task('electron', function(done){ 
    return runSeq('clean-electron', ['copy:spa-for-electron', 'copy:vendor-for-electron', 'copy:electron-manifest', 'copy:electron-scripts' ], done); 
}); 

私が得た最も近いがこれをやっていた:

私のindex.html:

<script src="vendor/es6-shim/es6-shim.js"></script> 
<script src="vendor/reflect-metadata/Reflect.js"></script> 
<script src="vendor/systemjs/dist/system.src.js"></script> 
<script src="vendor/zone.js/dist/zone.js"></script> 

<script> 
console.log("In my script tag:"); 
var systemConfigPath = 'system-config.js'; 
var mainPath = 'main.js'; 
if (window.location.protocol == "file:"){ 
    require(__dirname + '/vendor/es6-shim/es6-shim.js'); 
    require(__dirname + '/vendor/reflect-metadata/Reflect.js'); 
    require(__dirname + '/vendor/systemjs/dist/system.src.js'); 
    require(__dirname + '/vendor/zone.js/dist/zone.js'); 

    systemConfigPath = __dirname + '/' + systemConfigPath; 
    mainPath = __dirname + '/' + mainPath ; 
} 

System.import(systemConfigPath).then(function() { 
    System.import(mainPath); 
}).catch(console.error.bind(console)); 

が、それはまだ私のような問題を与えますベンダーファイルは同じディレクトリ内の他のファイルを参照します:

error

編集:

私は今(なし成功して)私の電子アプリケーションを構築するためにWebPACKのを使用しようとしています。

コードを表示したい場合は、github repoも作成しました。

答えて

2

大丈夫です!

<body> 
    <electron-angular-boilerplate-app>Loading...</electron-angular-boilerplate-app> 

    <!--will give errors in electron... oh well--> 
    <script src="vendor/es6-shim/es6-shim.js"></script> 
    <script src="vendor/reflect-metadata/Reflect.js"></script> 
    <script src="vendor/systemjs/dist/system.src.js"></script> 
    <script src="vendor/zone.js/dist/zone.js"></script> 

    <script> 
    // if require is defined, we are on node/electron: 
    if (!(typeof(require) == "undefined")){ 
     require('./vendor/es6-shim/es6-shim.js'); 
     require("./vendor/reflect-metadata/Reflect.js"); 
     require("./vendor/systemjs/dist/system.src.js"); 
     require("./vendor/zone.js/dist/zone.js"); 
     require("./system-config.js"); 
     require("./main.js"); 
    } else { 
     System.import('system-config.js').then(function() { 
     System.import('main'); 
     }).catch(console.error.bind(console));  
    } 

    </script> 
</body> 

これは私の角度CLIアプリケーションの両方を可能にする:私のindex.htmlは次のようになり、それはまだいくつかの愚かなエラーを生成しますように、私は、それが最良の答えだかわからないが、ここでは行く...

実行すると私の電子アプリを実行する。 <script src=...タグはまだ見つからないので、電子に​​エラーが生じます。私も電子からSystem.import行を削除しなければならなかったので、後で問題が発生しないことを願っています。

し、それを実行するために、私たちはアプリが構築されていることを確認し./distフォルダ内の電子を実行する必要があります。ここでは

ng build && electron ./dist 

は私の作業コードとブランチです:

https://github.com/jdell64/electronAngularBoilerplate/tree/so-37447020-answer 
+0

これはWebアプリケーションでエラーは発生しませんが、電子アプリでは「見つからない」エラーがいくつか発生します。誰かがより良い解決策を見つけたら、私はこれまでに解決策になることを認めます。 – Jeff

関連する問題