首页 > 解决方案 > 在 Linux 上使用 asar 运行电子应用程序 /Cannot GET index.html

问题描述

我在 /app/resources/app.asar 下构建了一个带有 asar 包的电子应用程序。当我在 linux 中运行这个应用程序时,我看到应用程序没有启动并且它抛出/Cannot GET index.html

该应用程序是为通过在电子框架内运行的 nodejs 服务器提供角度发行版而构建的。

这就是在 packge.json 中构建应用程序的方式

 "builderForLinx1": "electron-packager --out linx64 --overwrite --platform linux --appname myApp .  --executable-name ClientSettings --asar" 

这是 main.js 调用 app.js(nodejs 条目)

const { app, BrowserWindow } = require('electron')
const path = require('path');
const serverJS = require('./app');//node server

let win;

function createWindow () {
  // Create the browser window.
  win = new BrowserWindow({
    webPreferences: {
      nodeIntegration: true,
      webviewTag: true
    },
    show:false
  })

  
  win.loadURL("http://localhost:4440/index.html");
  win.setMenuBarVisibility(false);

  win.on('closed', function () {
    win = null
  })

  win.once('ready-to-show', () => {
    win.show();
    win.maximize();
  })
}

app.on('ready', createWindow)
**app.js**
var express = require('express')
var app = express()
var http = require('http');
var path = require('path');
const routes = require('./server/index.route');
const bodyParser = require('body-parser');

let port = 4440;
app.set('port', port);
let server;
server = http.createServer(app);
server.on('listening', onListening);
server.on('error', onError);

function onListening() {
    var addr = server.address();
    var bind = typeof addr === 'string'?'pipe ' + addr: 'port ' + addr.port;
    console.log('Listening on ' + bind);
  }
server.listen(port);


app.use( express.static(path.join(__dirname, 'dist/Angular-electron')))

// respond with "hello world" when a GET request is made from homepage
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

function onError(error) {
  if (error.syscall !== 'listen') {
    throw error;
  }

  var bind = typeof port === 'string'?'Pipe ' + port:'Port ' + port;

  switch (error.code) {
    case 'EACCES':
      console.error(bind + ' requires elevated privileges');
      process.exit(1);
      break;
    case 'EADDRINUSE':
      console.error(bind + ' is already in use');
      process.exit(1);
      break;
    default:
      throw error;
  }
}


routes(app);
module.exports = app;

但是,如果我在没有 -asar 的情况下构建应用程序,则应用程序会按预期启动!我这样做只是为了减少文件内容。这是要求的一部分。

标签: javascriptnode.jsangularelectronelectron-packager

解决方案


推荐阅读