Electron: рд╕реНрдерд╛рдиреАрдп рд╕рдВрд╕рд╛рдзрди рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ: file://index.html/ webpacking main.js . рдХреЗ рдмрд╛рдж

рдХреЛ рдирд┐рд░реНрдорд┐рдд 10 рдЕрдкреНрд░реИрд▓ 2016  ┬╖  31рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: electron/electron

рдореИрдВ рд╕рднреА main.js рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдЙрд╕рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡реЗрдмрдкреИрдХ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ (рдореИрдВ UI рдРрдк рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рд╛рдЗрд▓ рдФрд░ рд╕рд░реНрд╡рд░ рдРрдк рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рд╛рдЗрд▓ рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдБ)ред

рдЕрдЧрд░ рдореИрдВ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрд░реЛрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ index.html рдареАрдХ рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡реЗрдмрдкреИрдХрд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп, рдореБрдЭреЗ рд╢реАрд░реНрд╖рдХ рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИред

рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╡реЗрдмрдкреИрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

webpack({
    entry: [
        './main'
    ],
    output: {
        path: path.join(__dirname, 'asar'),
        filename: 'main.js',
        libraryTarget: 'commonjs2'
    },
    externals: ['electron'],
    target: 'node'
});

рдореИрдВ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЗрд╕ рддрд░рд╣ рд▓реЛрдб рдХрд░рддрд╛ рд╣реВрдВ:
mainWindow.loadURL('file://' + __dirname + '/index.html');

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╢рд╛рдпрдж рдЗрд▓реЗрдХреНрдЯреНрд░реЙрди рд╕рдВрджрд░реНрдн рдХреЗ рдмрд╛рд╣рд░ рд╡реЗрдмрдкреИрдХ рдХреЙрд▓рд┐рдВрдЧ/рдЗрд╡реЗрд▓рд┐рдВрдЧ рд╕рд╛рдорд╛рди рдХреЗ рдХрд╛рд░рдг рд╣реИ рдЬреЛ рд╕реНрдерд╛рдиреАрдп рдлрд╛рдЗрд▓реЛрдВ рдХреА рд╕реЗрд╡рд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдХреЛрдИ рд╡рд┐рдЪрд╛рд░/рд╕реБрдЭрд╛рд╡? рдзрдиреНрдпрд╡рд╛рдж!

  • рдЗрд▓реЗрдХреНрдЯреНрд░реЙрди рд╕рдВрд╕реНрдХрд░рдг: 0.37.2
  • рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо: рд╡рд┐рдВрдбреЛрдЬ 10 рд╣реЛрдо

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

Google рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╣рд╛рдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП FYI рдХрд░реЗрдВ: рдпрджрд┐ рдлрд╝рд╛рдЗрд▓ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ рддреЛ рдЖрдкрдХреЛ рд╡рд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИред рдореИрдВ рд▓рдХреНрд╖реНрдп рдлрд╝рд╛рдЗрд▓ рдХреЛ рдРрдк рдореЗрдВ рдХреЙрдкреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд▓реЗрдХреНрдЯреНрд░реЙрди-рдкреИрдХреЗрдЬрд░ рдХреЛ рдмрддрд╛рдирд╛ рднреВрд▓ рдЧрдпрд╛ред рдореЗрд░реА рдмреЗрд╡рдХреВрдлреА рднрд░реА рдЧрд▓рддрд┐рдпреЛрдВ рд╕реЗ рд╕реАрдЦреЛ :)

рд╕рднреА 31 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЖрдк рд╢рд╛рдпрдж webSecurity рдХреЛ webPreferences рдореЗрдВ BrowserWindow рдореЗрдВ рдмрдВрдж рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдзрд┐рдХ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рд╕рдореБрджрд╛рдп рд╕реЗ рдорджрдж рдорд╛рдВрдЧреЗрдВред

@MihaiValentin рдЕрд░реЗ, рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЗрд╕рдХрд╛ рдХреЛрдИ рд╣рд▓ рдорд┐рд▓рд╛?

@MihaiValentin @singhshashi рдореБрдЭреЗ рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рдереАред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗрдмрдкреИрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ __dirname рдЬреИрд╕реЗ рдиреЛрдб рдЧреНрд▓реЛрдмрд▓реНрд╕ рдХреЛ "рдореЙрдХ" рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ node.__dirname рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдЕрдХреНрд╖рдо рдХрд░ рджрд┐рдпрд╛ рдФрд░ ... рдпрд╣ рдХрд╛рдо рдХрд░ рдЧрдпрд╛!

рдмрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ target рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рд╡реЗрдмрдкреИрдХ-рд▓рдХреНрд╖реНрдп-рдЗрд▓реЗрдХреНрдЯреНрд░реЙрди-рд░реЗрдВрдбрд░рд░ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдпрд╣ рдореЗрд░рд╛ рдЕрдм рддрдХ рдХрд╛ рд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдпрд╣ рдорджрдж рдХрд░реЗрдЧрд╛:

var webpack = require('webpack');
var path = require('path');
var webpackTargetElectronRenderer = require('webpack-target-electron-renderer');

var BUILD_DIR = path.resolve(__dirname, 'build');
var APP_DIR = path.resolve(__dirname, 'src');

var config = {
  entry: APP_DIR + '/index.js',
  output: {
    path: BUILD_DIR,
    filename: 'index.js'
  },
  node: {
    __dirname: false,
    __filename: false
  },
  module : {
    loaders : [
      {
        test : /\.jsx?/,
        include : APP_DIR,
        exclude: /node_modules/,
        loader : 'babel'
      }
    ]
  }
};

config.target = webpackTargetElectronRenderer(config);

module.exports = config;

@eiriarte рдЗрд╕реЗ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдЕрдЧрд░ рдореИрдВ рд╡реЗрдмрдкреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореБрдЦреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдкреИрдХ рдХрд░рддрд╛ рд╣реВрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрддрд╛рдП рдЧрдП рдиреЛрдб рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде, рдореБрдЭреЗ рдЕрднреА рднреА рд╡рд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИред

рдореИрдВ рдПрдХ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рд╕рд╛рдЭрд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореИрдВ рдЗрд╕ рдзрд╛рдЧреЗ рдкрд░ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдЙрди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЬрд┐рдиреНрд╣реЗрдВ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрдмреЗрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдореИрдВрдиреЗ рдЗрдиреНрд╣реЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдЕрд▓рдЧ рдХрд░ рджрд┐рдпрд╛ред рдореЗрд░реЗ main.js рдореЗрдВ рдореИрдВ рдРрд╕реА рдХрд┐рд╕реА рднреА рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдмреЗрдмреЗрд▓ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓реЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕рд▓рд┐рдП рдЖрдпрд╛рдд рдХреЗ рдмрдЬрд╛рдп рдореИрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЬреЛ es7 рдкреНрд░рд╕реНрддрд╛рд╡ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдЬреИрд╕реЗ рдХрд┐ async рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛, рдореИрдВрдиреЗ рдЙрд╕ рдХреЛрдб рдХреЛ рдбреЗрд╕реНрдХрдЯреЙрдкрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдирд╛рдордХ рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рднреАрддрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ (рдЖрдк рдПрдХ рдмреЗрд╣рддрд░ рдирд╛рдо рдХреЗ рд╕рд╛рде рдЖ рд╕рдХрддреЗ рд╣реИрдВ)ред рдЕрдм рдореИрдВ рдбреЗрд╕реНрдХрдЯреЙрдк рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдВрдбрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реЗрдмрдкреИрдХ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рдФрд░ рдореИрдВ рдЗрд╕ рдмрдВрдбрд▓ рдХреЛ main.js рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реВрдВред

const myshell = require('./dist/desktopServices').myShell ;

рдореЗрд░реА webpack.config.main.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реИред

let config = {
  target:'electron',
  entry:'./desktopServices/desktopServices.js',
  output:{
    path:path.resolve(__dirname, 'dist'),
    filename: 'desktopServices.js',
    publicPath:'/dist/',
    libraryTarget:'commonjs2'
  },
  resolve: {
    extensions:["",".js",".json"]
  },
  module: {
    noParse: /node_modules\/json-schema\/lib\/validate\.js/,
    loaders:[{
      test: /\.js?$/,
      exclude: /node_modules/,
      loader: 'babel-loader'
    },
      {
        test: /\.json/,
        loader: 'json-loader',
      },
    ],
  },
}

module.exports = config;

рд╕рдмрд╕реЗ рд╕рд╛рдл рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╣ рдорд╛рд░реНрдЧ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рд▓реЗ рд░рд╣рд╛ рд╣реВрдВ, рдЬрдм рддрдХ рдХрд┐ рдХреБрдЫ рдРрд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдЬрд┐рдирдХрд╛ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдиреЛрдб рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдмреЗрдмреЗрд▓ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓реЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред

рдореЗрд░реЗ рд▓рд┐рдП, рдпрд╣ рдПрдХ рднреНрд░рд╛рдордХ рддреНрд░реБрдЯрд┐ рдирд┐рдХрд▓реАред рдореБрдЭреЗ not allowed to load local resource рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рдереА рдХреНрдпреЛрдВрдХрд┐ рд╡реЗрдмрдкреИрдХ рдиреЗ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдлрд╝рд╛рдЗрд▓ рд▓рд┐рдЦрдирд╛ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐ рдпрд╣ рдЧрд▓рдд рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдерд╛ред

рдореИрдВрдиреЗ рдЗрд╕реЗ setTimeout (рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдбрдХреНрдЯ рдЯреЗрдк) рдХреЗ рд╕рд╛рде ~рдлрд┐рдХреНрд╕ рдХрд┐рдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдореИрдВ рдЬреАрд╡рди рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝ рд╕рдХреВрдВ:

setTimeout(() => {
  win.loadURL(`file:///${__dirname}/index.html`);
}, 2000); // 1 second wasn't enough lol

рдореЗрд░реЗ рд▓рд┐рдП .. рдХрд╛рд░рдг рдпрд╣ рдерд╛ рдХрд┐ рд╡реЗрдмрдкреИрдХ рдмрдВрдбрд▓ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░ рд░рд╣рд╛ рдерд╛ .. рдкрд╣реБрдВрдЪ рд╕реЗ рдмрд╛рд╣рд░ рдерд╛ ... рдореИрдВрдиреЗ рдЗрд╕реЗ рдХреБрдЫ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рд╡рд╛рдкрд╕ рдЖрдХрд░ рдФрд░ рдКрдкрд░ рдмрддрд╛рдП рдЕрдиреБрд╕рд╛рд░ рдиреЛрдб рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ .. рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рдбреА

pathname: path.join(__dirname, '../../source/resources/views', 'index.html');

node: {
    __dirname: false,
    __filename: false
  },

Google рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╣рд╛рдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП FYI рдХрд░реЗрдВ: рдпрджрд┐ рдлрд╝рд╛рдЗрд▓ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ рддреЛ рдЖрдкрдХреЛ рд╡рд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИред рдореИрдВ рд▓рдХреНрд╖реНрдп рдлрд╝рд╛рдЗрд▓ рдХреЛ рдРрдк рдореЗрдВ рдХреЙрдкреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд▓реЗрдХреНрдЯреНрд░реЙрди-рдкреИрдХреЗрдЬрд░ рдХреЛ рдмрддрд╛рдирд╛ рднреВрд▓ рдЧрдпрд╛ред рдореЗрд░реА рдмреЗрд╡рдХреВрдлреА рднрд░реА рдЧрд▓рддрд┐рдпреЛрдВ рд╕реЗ рд╕реАрдЦреЛ :)

рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП (рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕ рдкреГрд╖реНрда рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдИ рдмрд╛рд░ рдЦреЛрдЬрд╛ рд╣реИ), рдпрд╣рд╛рдВ рд╡рд░реНрддрдорд╛рди рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ:

  1. рдлрд╝рд╛рдЗрд▓ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рдпрд╛ рдЖрдкрдХрд╛ рдиреЛрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЙрд╕ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ electron-packager рд▓рдХреНрд╖реНрдп рдлрд╝рд╛рдЗрд▓ рдХреЛ рдРрдк рдореЗрдВ рдХреЙрдкреА рдХрд░ рд░рд╣рд╛ рд╣реИ!

  2. рдЬрдм рдЖрдк рдЕрдкрдирд╛ BrowserWindow() рдмрдирд╛рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ webSecurity рдХреЛ webPreferences $ рдХреЗ рднреАрддрд░ рдЕрдХреНрд╖рдо рдХрд░рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИ:

{
  webPreferences: {
    webSecurity: false
  }
}
  1. рд╡реЗрдмрдкреИрдХ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, node.__dirname рдЬреИрд╕реЗ рдиреЛрдб рдЧреНрд▓реЛрдмрд▓реНрд╕ рдХреЛ "рдореЙрдХ" рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рдЖрдк рдЗрд╕реЗ рдЕрдкрдиреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝рдХрд░ рдЕрдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
  node: {
    __dirname: false
  }
  1. рдЖрдк setTimeout() (рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ URL рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рджреЗрд░реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдРрдк рд╕реЗ ready рдИрд╡реЗрдВрдЯ рднреЗрдЬреЗ рдЬрд╛рдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдмреЗрд╣рддрд░)ред
setTimeout(() => {
  win.loadURL(`file:///${__dirname}/index.html`);
}, 2000); // 1 second wasn't enough lol
app.on('ready', () => {
  win.loadURL(`file:///${__dirname}/index.html`);
})

рдореЗрд░реЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рдерд╛

  1. рд╡реЗрдм рд╕реБрд░рдХреНрд╖рд╛ рдЕрдХреНрд╖рдо рдХрд░реЗрдВред
  2. рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп, рдореИрдВ __dirname+"./FileName" рдХрд░ рд░рд╣рд╛ рдерд╛ред рддреЛ рдпрд╣ 'C:/Folder./FileName' рдмрдирд╛ рд░рд╣рд╛ рдерд╛ред рддреЛ рдмрд╕ "/" рдХреЗ рдмрдЬрд╛рдп рдХреЛрдИ "./" рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдХреЛрдИ рдореБрджреНрджрд╛ рдирд╣реАрдВ рдерд╛ рдФрд░ рдЬрдм рддрдХ рдореИрдВрдиреЗ ASAR рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ред
  3. рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдирд╛рдореЛрдВ рдХреЗ рд╕рдЦреНрдд рдЖрд╡рд░рдг рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реИред рдЕрд╕рд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж рдореБрдЭреЗ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЖрдИ, рддрдм рддрдХ рдпрд╣ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЙрддреНрдкрд╛рджрди рдореЗрдВ рднреА рд╕рд╣реА рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛ред

рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдореЗрд░реЗ рдЬреИрд╕реЗ рдиреНрдпреВрдм рдХреА рдорджрдж рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рд╡реЗрдмрдкреИрдХ рджреЗрд╡ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдореБрдЦреНрдп рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдВрдбреЛ рдкрд░ http://localhost:8080/ рд▓реЛрдб рдХрд░ рд░рд╣рд╛ рд╣реВрдВ (рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╣реЙрдЯ рдореЙрдбреНрдпреВрд▓ рдкреБрдирдГ рд▓реЛрдб рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ)ред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рдереА рдХрд┐ file:// рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╕рд╛рде <iframe> рдкрд░ рд▓реЛрдб рд╣реЛрдиреЗ рдкрд░ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛ред

рдЬреИрд╕рд╛ рдХрд┐ @popey456963 рджреНрд╡рд╛рд░рд╛ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдореИрдВрдиреЗ рдмрд╕ рд╡реЗрдм рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░ рджрд┐рдпрд╛ рд╣реИред

рдореЗрд░реЗ рдкрд╛рд╕ electron-main рдФрд░ electron-renderer . рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рд╡реЗрдмрдкреИрдХ рдХреЗ рд▓рд┐рдП рджреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реИрдВ

const path = require('path');
const config_main = {
  target: 'electron-main',
  entry: path.resolve(__dirname, 'src/main/index.js'),
  output: {
    path    : path.resolve(__dirname, 'static'),
    filename: 'main.js'
  },
  externals: [{ 'electron-store': 'require("electron-store")' }],
  resolve: {
    alias: {
      main   : path.resolve(__dirname, 'src/main/'),
      common : path.resolve(__dirname, 'src/common/')
    }
  }
};

const config_renderer = {
  target: 'electron-renderer',
  entry: path.resolve(__dirname, 'src/renderer/index.js'),
  output: {
    path    : path.resolve(__dirname, 'static'),
    filename: 'renderer.js'
  },
  externals: [{ 'electron-store': 'require("electron-store")' }],
  resolve: {
    alias: {
      components : path.resolve(__dirname, 'src/renderer/components/'),
      core       : path.resolve(__dirname, 'src/renderer/core/'),
      states     : path.resolve(__dirname, 'src/renderer/states/'),
      ui         : path.resolve(__dirname, 'src/renderer/ui/'),
      common     : path.resolve(__dirname, 'src/common/'),
    }
  }
};

module.exports = [
  config_main,
  config_renderer
];

рдореИрдВрдиреЗ рдЖрд╡реЗрджрди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ

  node: {
    __dirname: false
  },

рдореИрдВрдиреЗ рдЕрдкрдиреЗ renderer.js рдореЗрдВ __dirname рдХреЛ рд╕рд╛рдВрддреНрд╡рдирд╛ рджреА рд╣реИ рдФрд░ рджреЛрдиреЛрдВ рд╣реА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрджрд┐ рдореЗрд░реЗ рдкрд╛рд╕ __dirname рдЧрд▓рдд рдпрд╛ рд╕рддреНрдп рдкрд░ рд╕реЗрдЯ рд╣реИ рддреЛ рд╡реЗ рджреЛрдиреЛрдВ / рдкреНрд░рд┐рдВрдЯ рдЖрдЙрдЯ рд▓реЗрддреЗ рд╣реИрдВ

рдмреЗрд╢рдХ рдЕрдЧрд░ рдореИрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкреВрд░реНрдг рдпреВрдЖрд░рдПрд▓ рдбрд╛рд▓рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдирд┐рд╢реНрдЪрд┐рдд рдХреНрдпреЛрдВ __dirname рд╕рд╣реА рд░рд╛рд╕реНрддрд╛ рджреЗрдиреЗ рд╕реЗ рдЗрдВрдХрд╛рд░ рдХрд░ рджреЗрддрд╛ рд╣реИред

рд╡рд┐рдЪрд╛рд░

webpackTargetElectronRenderer рд▓рдХреНрд╖реНрдп рдХреЗ рд╕рдорд╛рди рд╣реА рд╣реИ: electron-main

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ electron-main рдХреЛ рд╡реЗрдмрдкреИрдХ рдореЗрдВ webpackTargetElectronRenderer рдЕрдкреНрд░рдЪрд▓рд┐рдд рдмрдирд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛

рдпрд╣рд╛рдВ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ electron-main рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ
https://github.com/webpack/webpack/blob/master/lib/WebpackOptionsApply.js#L70 -L185

рдпрд╣рд╛рдВ рдЖрдк рдареАрдХ рдЙрд╕реА рдХреЛрдб рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
https://github.com/chentsulin/webpack-target-electron-renderer/blob/master/index.js

рдкрддрд╛ рдЪрд▓рд╛ рдореЗрд░реЗ рдкрд╛рд╕ рдерд╛

  node: {
    __dirname: false
  },

рдореЗрд░реА рдореБрдЦреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдмрдЬрд╛рдп рдореЗрд░реЗ рд░реЗрдВрдбрд░рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВред рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдореЗрд░реА рдХреЙрдиреНрдлрд┐рдЧ рдлрд╛рдЗрд▓ рдкрд╕рдВрдж рдЖрддреА рд╣реИ рддреЛ рдореИрдВ рдЕрдкрдиреА рдЯрд┐рдкреНрдкрдгреА рдКрдкрд░ рд░рдЦреВрдВрдЧрд╛ред

рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдореИрдВ рд╡реЗрдмрдкреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ?

@hbgdPro https://github.com/electron/electron/issues/5107#issuecomment -299971806, 1, 2 рдФрд░ 4 рд╕реЗ рдХреБрдЫ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдЖрдЬрд╝рдорд╛рдПрдВ, рд╕рднреА рдХреЛ рд╡реЗрдмрдкреИрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

@ рдкреЛрдкреА456963 рдзрдиреНрдпрд╡рд╛рджред рдореИрдВрдиреЗ рдкреВрдЫрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реА рдХреЛрд╢рд┐рд╢ рдХрд░ рд▓реА рдереАред рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрдЭреЗ рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдерд╛ рдХрд┐ рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдореБрдЭреЗ рдХреМрди рд╕реЗ рдлрд╝реЛрд▓реНрдбрд░ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рд╡реЗрдмрдкреИрдХ рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИред

рдореИрдВ рдЕрднреА рдЗрд╕ рдкрд░ рдЦреБрдж рдЖрдпрд╛ рд╣реВрдВ, (рд╣рд╛рдп рдореИрдВ рд╡реЗрдмрдкреИрдХ рдЯреАрдо рд╕реЗ рд╣реВрдВ)ред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡реЗрдмрдкреИрдХ рдореЗрдВ рдПрдХ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрди-рдореБрдЦреНрдп рд▓рдХреНрд╖реНрдп рд╣реИ, рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ __dirname рдФрд░ __filename рдореЙрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рддреНрд╡рд░рд┐рдд-рдкреНрд░рд╛рд░рдВрдн рдЙрджрд╛рд╣рд░рдг рдХреЛ рддреЛрдбрд╝рддреЗ рд╣реИрдВред

рдмрд╕ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд▓реЗрдХреНрдЯреНрд░реЙрди рдЯреАрдоред рдХреНрдпрд╛ рдЗрд╕реЗ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рд┐рдлрд╛рд░рд┐рд╢ рд╣реЛрдЧреА? рдпрджрд┐ рдРрд╕рд╛ рд╣реИ рддреЛ рдореИрдВ рдЖрдЧреЗ рдмрдврд╝реВрдВрдЧрд╛ рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрди-рдореБрдЦреНрдп рд▓рдХреНрд╖реНрдп рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реА рдЪреВрдХ рдХрд╛ рдкреАрдЖрд░ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдЗрди рдмрд┐рд▓реНрдЯрд┐рдиреЛрдВ рдХрд╛ рдордЬрд╛рдХ рди рдЙрдбрд╝рд╛рдпрд╛ рдЬрд╛рдПред

рдзрдиреНрдпрд╡рд╛рдж!

@TheLarkInn __dirname рдФрд░ __filename рдЕрдзрд┐рдХрд╛рдВрд╢ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрди рдРрдкреНрд╕ рдХреЗ рд▓рд┐рдП рдЕрддрд┐ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рд░реЗрдВрдбрд░рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП HTML рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрде рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрдирдХрд╛ рдордЬрд╛рдХ рдЙрдбрд╝рд╛рдирд╛ рдЪреАрдЬреЛрдВ рдХреЛ рд╕рдмрд╕реЗ рдЬреНрдпрд╛рджрд╛/рд╣рд░ рд╕рдордп рддреЛрдбрд╝рддрд╛ рд╣реИред рдЙрдирдХрд╛ рдЙрдкрд╣рд╛рд╕ рди рдХрд░рдиреЗ рд╕реЗ рдХрдИ рд▓реЛрдЧреЛрдВ рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ рдареАрдХ рд╣реЛ рдЬрд╛рдПрдВрдЧреА

рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╡реЗрдмрдкреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдореИрдВрдиреЗ рдПрдХ рдЕрдЬреАрдм рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдареЛрдХрд░ рдЦрд╛рдИ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЕрдзрд┐рдХ рдЕрдиреБрднрд╡ рд╡рд╛рд▓рд╛ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ рдФрд░ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рдерд╛ред

win.loadURL('file://${__dirname}/renderer/main.html')

рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХреЛ рдирд┐рдореНрди рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рддреНрд░реБрдЯрд┐ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдИ рдереА, рдФрд░ рдПрдЪрдЯреАрдПрдордПрд▓ рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдЧрд╛ред

win.loadURL('file://' + __dirname + '/renderer/main.html')

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореВрд▓ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ HTML рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдиреБрдЪрд┐рдд рдкрде рджреЗ рд░рд╣рд╛ рдерд╛, рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рдкрддрд╛ рд╣реИ рдХреНрдпреЛрдВ?

@s-lawrence рдЕрдиреБрдЪрд┐рдд рдкрде рдХрд╛ рдХрд╛рд░рдг рд╣реИ:

win.loadURL('file://${__dirname}/renderer/main.html')

рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП

win.loadURL(`file://${__dirname}/renderer/main.html`)

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals

рдЖрд╣ рдареАрдХ рд╣реИ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдЙрд╕ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛рдиреЗ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдПрдХ рд╕рдВрджрд░реНрдн рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП @milewski рдзрдиреНрдпрд╡рд╛рджред

рдореИрдВ рдЖрдорддреМрд░ рдкрд░ рд╕рдВрдпреЛрдЬрди рдХреЗ рд╕рд╛рде рд░рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрдм рдЬрдм рдореБрдЭреЗ рдЙрдЪрд┐рдд рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдкрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЕрдХреНрд╖рд░ рдХрд╛ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреВрдВрдЧрд╛, рд╡реЗ рдПрдХ рдмрд╣реБрдд рд╕рд╛рдл рджрд┐рдЦрдиреЗ рд╡рд╛рд▓реЗ рд╣реИрдВред

@milewski , рдореБрдЭреЗ рдЖрдкрдХреЗ рджреЛ рд╕реНрдирд┐рдкреЗрдЯ рдореЗрдВ рдХреЛрдИ рдЕрдВрддрд░ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИред рдХреНрдпрд╛ рджреВрд╕рд░рд╛ рд╡рд╛рд▓рд╛ рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рд╕реЗ рдЕрд▓рдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?

@ рдЬреЗрдХрд╣реЙрдХреА 10 рджреВрд╕рд░реЗ рдореЗрдВ рд╕рд┐рдВрдЧрд▓ рдХреЛрдЯреНрд╕ рдХреЗ рдмрдЬрд╛рдп рдмреИрдХрдЯрд┐рдХреНрд╕ рд╣реИрдВред рдмреИрдХрдЯрд┐рдХреНрд╕ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЕрдХреНрд╖рд░ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╢рд╛рдмреНрджрд┐рдХ рд╣реИред рдкрд╣рд▓рд╛ рдЙрджрд╛рд╣рд░рдг рдПрдХ рдирд┐рдпрдорд┐рдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╢рд╛рдмреНрджрд┐рдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП ${__dirname} рднрд╛рдЧ рдХреЛ рдХрднреА рднреА __dirname рдорд╛рди рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрднреА-рдХрднреА рдпрд╣ рдиреЛрдЯрд┐рд╕ рдХрд░рдирд╛ рдмрд╣реБрдд рдХрдард┐рди рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдкрдХрд╛ рд╕рдВрдкрд╛рджрдХ рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, GFM рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ)ред

рдЖрд╣ рдЧреЛрдЪрд╛ред рдЧрд┐рдЯрд╣рдм рдХреЗ рдорд╛рд░реНрдХрдбрд╛рдЙрди рдореЗрдВ рдЗрд╕реЗ рджреЗрдЦрддреЗ рд╕рдордп рдореИрдВрдиреЗ рдЙрд╕ рдЕрдВрддрд░ рдХреЛ рдирд╣реАрдВ рджреЗрдЦрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдП рдЧрдП рдЕрдВрддрд░ рдХреЛ рдиреЛрдЯрд┐рд╕ рдХрд░рддрд╛ рд╣реВрдВред рдЭреВрдареЗ рдЕрд▓рд╛рд░реНрдо рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ ;-)

рдмрд╕ рд╕реЛрдЪрд╛ рдХрд┐ рдореИрдВ рдЬреЛрдбрд╝ рджреВрдВрдЧрд╛, рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рдореЗрд░реА рдЕрдкрдиреА рдЧрд▓рддреА (рдХреИрдк рд╕рдВрд╡реЗрджрдирд╢реАрд▓рддрд╛) рдХреЗ рдХрд╛рд░рдг рднреА рдорд┐рд▓реА рд╣реИ
рдореИрдВ pathname: path.join(__dirname, 'Views/settingsWindow.html') рдкрд░ рдХреЙрд▓ рдХрд░ рд░рд╣рд╛ рдерд╛ рдЬрдм рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рд╕рднреА рд▓реЛрдЕрд░ рдХреЗрд╕ рдерд╛ред

рд╡реЗрдмрдкреИрдХ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рдЗрд╕рдиреЗ рдПрдХ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдХреАред

рдореИрдВрдиреЗ рдХреБрдЫ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ ([email protected] рдХреЗ рд╕рд╛рде рдЗрд▓реЗрдХреНрдЯреНрд░реЙрди@3.0.7 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)ред
рдореБрдЭреЗ рдПрдХ рдкреЛрд╕реНрдЯ рдореЗрдВ SO рдкрд░ рдХреЗрд╡рд▓ 3 рд╡реЛрдЯреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛: рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЗрд╕ рдкреИрдХреЗрдЬ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ!
https://stackoverflow.com/questions/45041364/angular-electron-webpack-live-reloading

рд╢реВрдиреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди-рдкрд░реЗрд╢рд╛рдиреА рд╕рдорд╛рдзрд╛рди:
-рдПрдирдкреАрдПрдо рдЗрд▓реЗрдХреНрдЯреНрд░реЙрди-рдкреБрдирдГ рд▓реЛрдб рдХреА рд╕реНрдерд╛рдкрдирд╛ рд░рджреНрдж рдХрд░реЗрдВ
-рдПрдХ рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдПрдирдЬреА рд╕рд░реНрд╡ рдХрд░реЗрдВ
-in main.js win.loadURL( http://localhost:4200/index.html );
-рдлрд┐рд░ рджреВрд╕рд░реЗ рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ npm рд░рди рдЗрд▓реЗрдХреНрдЯреНрд░реЙрди рдЪрд▓рд╛рдПрдВ

рдпрд╣ рд╕рд┐рд░реНрдл рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдкрдирд╛ рдкреВрд░рд╛ рджрд┐рди рдареАрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдЕрдВрдд рдореЗрдВ рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдБрдЪ рдХрд░реЗрдВ
https://github.com/electron-userland/electron-builder/issues/2955#issuecomment -393524832

рдЬрдм рдЖрдк package.json рдореЗрдВ "рдмрд┐рд▓реНрдб" рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдмрд╕ рдЖрд╡рд╢реНрдпрдХ рдлрд╛рдЗрд▓реЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:

    "files": [
      "./build/**/*",
      "./index.html",
      "./src/*.js"
    ],

рддрдм рдЗрд▓реЗрдХреНрдЯреНрд░реЙрди-рдмрд┐рд▓реНрдбрд░ рдЗрд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреИрдХ рдХрд░реЗрдЧрд╛ред

рдЗрд╕рдХреЗ рд▓рд┐рдП 'рдлрд╝рд╛рдЗрд▓: //' рдЙрдкрд╕рд░реНрдЧ рдирд┐рдХрд▓рд╛ рдЬреЛ рдореБрдЭреЗ loadUrl рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдерд╛ред
рдерд╛:
win.loadUrl(path.join(__dirname, "./index.html"))
рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛:
win.loadUrl(path.join("file://",__dirname, "./index.html"))

рд╡реЗрдмрдкреИрдХ рдореБрдЭреЗ рдПрдЪрдЯреАрдПрдордПрд▓ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдореЗрдВ рдпреВрдЖрд░рдПрд▓ рдореЗрдВ рдЖрдЧреЗ рдФрд░ рдкреАрдЫреЗ рдХреА рд╕реНрд▓реИрд╢ рджреЛрдиреЛрдВ рдХреЛ рдорд┐рд▓рд╛рдХрд░ рдкрд░реЗрд╢рд╛рди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреЛрдб рдХреЗ url рдФрд░ path рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ:

const winURL = process.env.NODE_ENV === 'development'
  ? 'http://localhost:9080'
  : url.format({
    protocol: 'file',
    pathname: path.join(__dirname, 'index.html'),
  });

рдпрд╣ рдПрдХ рдЖрдкрджрд╛ рд╣реИ, рдореИрдВ рд╕реАрдЖрд░рдП + рдЗрд▓реЗрдХреНрдЯреНрд░реЙрди рдореЗрдВ рдлрдВрд╕ рдЧрдпрд╛ рд╣реВрдВ, рджреЗрд╡ рдореЛрдб рдореЗрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИ рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рдВрдбреЛрдЬрд╝ рдПрдХреНрд╕рдИ рдореЗрдВ рдкреИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдмрд┐рд▓реНрдХреБрд▓ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рд╕рдордЭ рдЧрдпрд╛ред рдпрджрд┐ рдЖрдк рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд░рд╛рдЙрдЯрд░ рдХреЗ рд╕рд╛рде рд╕реАрдЖрд░рдП рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╣реИрд╢ рд░рд╛рдЙрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдмреНрд░рд╛рдЙрдирд░рд╛рдЙрдЯрд░ рдХрд╛ рдирд╣реАрдВред рдХрд┐рдпрд╛ рд╣реБрдЖ!!! ЁЯШВ https://github.com/electron-userland/electron-builder/issues/2167 рджреЗрдЦреЗрдВ

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

feross picture feross  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jviotti picture jviotti  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

dangan-ronpa picture dangan-ronpa  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

sindresorhus picture sindresorhus  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

maxogden picture maxogden  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ