Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save jayluxferro/c7c8f07c375f4194ba589503621b6187 to your computer and use it in GitHub Desktop.
Save jayluxferro/c7c8f07c375f4194ba589503621b6187 to your computer and use it in GitHub Desktop.
Desktop application using Electron with Sailsjs
  1. command
$ npm install sails -g
  1. command
$ sails new DesktopApp
  1. command
$ npm install electron -g
  1. command
$ npm install electron electron-packager electron-builder --save-dev --save-exact
  1. Main.js
const {app, BrowserWindow} = require('electron');
const path=require('path');
const Sails = require('sails').constructor;
const sailsApp = new Sails();
var mainWindow;
//let create a browser window
function createWindow () {
    const{screen}= require('electron');
  let mainScreen = screen.getPrimaryDisplay();
     let dimensions = mainScreen.size;
     let shouldQuit = makeSingleInstance()
      if (shouldQuit) return app.quit()
      mainWindow = new BrowserWindow({
        width: dimensions.width,
        height: dimensions.height,
        title: "DesktopApp",
        center: true
      });
     
      mainWindow.on('closed', function () {
        mainWindow = null
      });
  mainWindow.webContents.openDevTools();
  mainWindow.setMenu(null);

  initialize()
}
//lift sails app
function initialize(){
   sailsApp.lift({
    "paths": {
         "public": "assets"
        },
        "appPath":__dirname
     }, function (err) {
  if (err) {
    console.log('Error occurred loading Sails app:', err);
    return;
  }
   console.log('Sails app loaded successfully!');
 //after lifting load url
   mainWindow.loadURL('http://localhost:1337');
   mainWindow.webContents.on('did-finish-load', function() {
   mainWindow.focus();
   })
  });
 }

app.disableHardwareAcceleration();
//app closed shut down sails app
app.on('quit', function () {
  sailsApp.lower(
  function (err) {
    if (err) {
      return console.log("Error occurred lowering Sails app: ", err);
    }
     process.exit(err ? 1 : 0);
    console.log("Sails app lowered successfully!");
  }
)
});
app.on('ready',function(){
    createWindow()
})
app.on('window-all-closed', function () {
  if (process.platform !== 'darwin') {
    app.quit()
  }
});

app.on('activate', function () {
  if (mainWindow === null) {
    createWindow()
  }
});
//if app is already opened dont open again
function makeSingleInstance () {
  if (process.mas) return false

  return app.makeSingleInstance(function () {
    if (mainWindow) {
      if (mainWindow.isMinimized()) mainWindow.restore()
      mainWindow.focus()
    }
  })
}
  1. package.json
"scripts": {
    "debug": "node debug app.js",
    "package:win": "electron-packager . --asar --prune=true --overwrite --platform=win32 --arch=ia32 --out=out",
    "package:linux": "electron-packager . --asar --prune=true --overwrite --platform=linux --arch=ia32 --out=out",
    "package:mac": "electron-packager . --asar --prune=true --overwrite --platform=darwin --arch=ia32 --out=out",
    "start": "node app.js",
    "dist": "build"
  },
  "main": "main.js",
  "build": {
    "appId": "com.DesktopApp",
    "win": {
      "target": [
        {
          "target": "nsis",
          "arch": [
            "x64",
            "ia32"
          ]
        }
      ]
    },
    "linux": {
      "category": "Development",
      "target": "AppImage"
    },
    "mac": {
      "category": "Development"
    }
  },
  1. command
$ npm run package:win
  1. command
$ npm run dist
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment