电子应用程序未找到包含

时间:2016-03-08 22:28:37

标签: node.js gulp electron

我有一个HTML5网络应用程序,我通过Electron打包。我通过gulp-electron进行包装。

我遇到的问题是,当构建应用程序并运行它时,没有加载index.html文件中引用的CSS或JS文件。

我可以看到资产包含在构建中,并且是:myapp.app/Contents/Resources/app/文件夹中.app包的一部分。

事实上,如果我cd到该目录并运行节点webserver(httpster),该应用程序运行正常。

以下是我的CSS / JS的引用方式:



<!-- CSS -->
<link rel="stylesheet" href="./bower_components/bootstrap/dist/css/bootstrap.min.css" type="text/css" media="screen">
<link rel="stylesheet" type="text/css" href="./styles/style.css" />
<link rel="stylesheet" href="./bower_components/angular-ui/build/angular-ui.min.css" type="text/css" media="screen">

<!-- Vendors -->
<script type="text/javascript" src="./js/nonangular/jquery-1.11.2.min.js"></script>
<script type="text/javascript" src="./js/nonangular/jquery-1.11.2.min.js"></script>

<script src="./bower_components/bootstrap/dist/js/bootstrap.min.js" type="text/javascript" charset="utf-8"></script>
<link rel="stylesheet" href="./bower_components/angular-ui/build/angular-ui.min.css" type="text/css" media="screen">


<!-- Non-angular libraries -->
<script type="text/javascript" src="./js/nonangular/lodash.min.js"></script>
<script type="text/javascript" src="./js/scripts.js"></script>

<!-- Angular external libraries for application -->
<script type="text/javascript" src="./node_modules/angular/angular.js"></script>
<script type="text/javascript" src="./node_modules/angular-route/angular-route.js"></script>
<script type="text/javascript" src="./node_modules/angular-sanitize/angular-sanitize.js"></script>
<script type="text/javascript" src="./node_modules/angular-animate/angular-animate.js"></script>
<script src="./bower_components/angular-ui/build/angular-ui.min.js" type="text/javascript"></script>
<script src="./node_modules/angular-ui-bootstrap/dist/ui-bootstrap.js" type="text/javascript" charset="utf-8"></script>
<script src="./node_modules/angular-ui-bootstrap/dist/ui-bootstrap-tpls.js" type="text/javascript" charset="utf-8"></script>

<script src="./bower_components/angular-activity-monitor/activity-monitor.min.js" type="text/javascript"></script>

<!-- Angular components -->
<!-- build:appcomponents js/appcomponents.js -->
<script type="text/javascript" src="./js/app.js"></script>
<script type="text/javascript" src="./js/config.js"></script>
<script type="text/javascript" src="./components/directives/main.nav.directive.js"></script>

<!-- Application sections -->
<!-- build:mainapp js/mainapp.js -->
<script type="text/javascript" src="./js/controller.js"></script>
<script src="./components/main/mainController.js" type="text/javascript" charset="utf-8"></script>
&#13;
&#13;
&#13;

我试过改变路径,不包括&#39; ./'在引用的文件夹之前没有效果。

我的Gulpfile电子任务看起来像这样:

&#13;
&#13;
gulp.task('electron', function() {

  gulp.src("")
    .pipe(electron({
      src: './app',
      packageJson: packageJson,
      release: './release',
      cache: './cache',
      version: 'v0.36.10',
      packaging: true,
      platforms: ['win32-ia32', 'darwin-x64'],
      platformResources: {
        darwin: {
          CFBundleDisplayName: packageJson.name,
          CFBundleIdentifier: packageJson.name,
          CFBundleName: packageJson.name,
          CFBundleVersion: packageJson.version,
          icon: './app/gulp-electron.icns'
        },
        win: {
          "version-string": packageJson.version,
          "file-version": packageJson.version,
          "product-version": packageJson.version,
          "icon": './app/gulp-electron.ico'
        }
      }
    }))
    .pipe(gulp.dest(""));
});
&#13;
&#13;
&#13;

我的app文件夹结构如下所示:

enter image description here

令人沮丧的是,我已经在另一个项目上使用了这个确切的设置,并且可执行文件工作正常,并且能够很好地到达.app包中捆绑的所有资产。

4 个答案:

答案 0 :(得分:8)

原来路径存在一些问题。

首先,CSS使用相对路径来引用图像。将其切换为绝对路径就可以了。这是指令的相同问题。用绝对路径切换相对路径就可以了。

最后,没有加载的实际CSS和JS文件看起来是因为在主index.html中有这样的:

    <base href="/">

哪个搞乱了。删除它允许CSS和JS正确加载。

答案 1 :(得分:1)

电子通过file://协议处理文件,因此任何基本href均应以“。”开头。

要使其工作,请在index.html中(如果'/'是您的基本href) 改变

<base href="/"> 

进入

<base href="./">

..并且路径错误将消失。

因此,对于电子应用程序,我们始终需要使用以'。'开头的基本href编译角度距离,当/是您的基本时,编译为

ng buid --prod --base-href ./

答案 2 :(得分:0)

我发现您需要插入以“ ../”开头的href,例如:

<link rel="stylesheet" type="text/css" href="../src/css/index.css"/>

答案 3 :(得分:0)

我终于明白在 Electron 中包含静态文件有什么问题

<link rel="stylesheet" href="./app/css/app.css">
<link rel="stylesheet" href="./app/libs/mdl/material.min.css">

这不起作用,因为它们包含在我的 index.html 中,而不是在根文件夹中。

它在 "app/html/index.html" 中,所以我必须告诉 Electron 我项目的根在哪里!

只需在包含脚本的 index.html 文件顶部添加 <base href="../../">

对我来说我必须返回 2 个文件夹才能到达项目的根目录。在您的情况下,它可能更少(../ 然后)或更多(../../../ 然后)等