рдореИрдВ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрди рдХреЗ рд▓рд┐рдП рдирдпрд╛ рд╣реВрдВ рдФрд░ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдФрд░ рд╡рд┐рддрд░рд┐рдд рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдЬреЗрдПрд╕ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬреЛ рдХрд┐ require
d рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдореЙрдбреНрдпреВрд▓ рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ require
рдореЗрд░реА рдХрд╕реНрдЯрдо рдпреЛрдЬрдирд╛ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрд╣ рдореЗрд░рд╛ рдкрд░реНрдпрд╛рд╡рд░рдг рд╣реИ:
lib/ - node scripts
main.js - node entry script
resources/ - client side resources
css/
html/
index.html
js/ - client side scripts
main.js
test.js
package.json
lib/main.js рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╣реЛрдордкреЗрдЬ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ:
// lib/main.js
'use strict';
const electron = require('electron');
const app = electron.app; // Module to control application life.
const BrowserWindow = electron.BrowserWindow; // Module to create native browser window.
const path = require('path');
var mainWindow = null;
app.on('ready', function() {
const protocol = electron.protocol;
/* js, css, fonts, ... */
protocol.registerFileProtocol('resource', (request, callback) => {
var url = request.url.substr(11);
callback({path: path.join(__dirname, '../resources', url)});
});
/* html, possible rendered from other files like markdown or jade */
protocol.registerFileProtocol('view', (request, callback) => {
var url = request.url.substr(11);
callback({path: path.join(__dirname, '../resources/html', url)});
});
// Create the browser window.
mainWindow = new BrowserWindow({width: 800, height: 600});
// and load the index.html of the app.
mainWindow.loadURL('view://index.html');
// Open the DevTools.
mainWindow.webContents.openDevTools();
// ...
});
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ view://
рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдкреАрдЫреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЕрдиреНрдп рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдПрдЪрдЯреАрдПрдордПрд▓ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реА рд╣реИ, рдЬреИрд╕реЗ рдорд╛рд░реНрдХрдбрд╛рдЙрди рдпрд╛ рдЬреЗрдб ( view://index.jade
рдЬреЗрдб рдлрд╛рдЗрд▓ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдЧрд╛ рдФрд░ рдПрдЪрдЯреАрдПрдордПрд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛рдПрдЧрд╛)ред
<!-- resources/html/index.html -->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Electron Test</title>
</head>
<body>
<h1>Electron Test</h1>
<script src="resource://js/main.js"></script>
</body>
</html>
рдПрдЪрдЯреАрдПрдордПрд▓ рдлрд╝рд╛рдЗрд▓ рдореЗрд░реЗ рдХрд╕реНрдЯрдо resource://
рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реАрдПрд╕рдПрд╕ рдпрд╛ рдЬреЗрдПрд╕ рдлрд╛рдЗрд▓реЛрдВ рдЬреИрд╕реЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдЬрд╛рдПрдЧреАред рдореБрдЦреНрдп рдлрд╝рд╛рдЗрд▓ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХреА рдЧрдИ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рд╡рд╣рд╛рдВ require
рджреВрд╕рд░реА рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛:
// resources/js/main.js
const test = require('./test'); // Error: Cannot find module './test'
test.sayHello();
// resources/js/test.js
exports.sayHello = function() {
console.log('Hello!');
};
рдореИрдВ рдЗрд╕реЗ electron .
, v0.36.7 рдХреЗ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
devtools рдореЗрдВ require
рдХреЗ рдкреАрдЫреЗ рдХреЛрдб рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╕рдордп (рд▓рдЧрднрдЧ module.js:336
, рдиреЛрдб рдХреЗ рд╡рд░реНрддрдорд╛рди рдорд╛рд╕реНрдЯрд░ рдореЗрдВ рд▓рд╛рдЗрди 337 ) рдЬрдм рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ, рддреЛ request
"./test"
рдФрд░ paths
рдореЗрдВ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрди рдХреЗ рдХреЛрд░ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╣реИ, рдФрд░ рдореБрдЭреЗ рдЦреЛрдЬ рдкрдереЛрдВ рдХреА рдЙрд╕ рд╕реВрдЪреА рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓рд╛ред
рдореИрдВрдиреЗ рдЕрдиреНрдп рдореБрджреНрджреЛрдВ (#4459, #2539) рдХреА рдЬрд╛рдБрдЪ рдХреА рд╣реИ рдЬреЛ рдПрдХ рд╣реА рдореБрджреНрджреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рддреАрдд рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЛрдВрдиреЗ рдореЗрд░реА рдорджрдж рдирд╣реАрдВ рдХреА (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП module
рдХреЗ рдкрде рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдкреНрд░реАрд▓реЛрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдпрд╛ GlobalPaths рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ .
рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ? рдпрд╛ рдЖрдк рдПрдХ рдПрдХрд▓ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрдВрдЧреЗ? (рдореИрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬреЛ рд╕рднреА рд╕реНрд░реЛрдд рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИ)ред
рдЖрдк module.paths
рдореЗрдВ рдиреЛрдб рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЦреЛрдЬ рдкрде рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрджрд┐ рдЖрдкрдХрд╛ resources/js
рдЗрд╕рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рддреЛ require
test.js
рдирд╣реАрдВ рдвреВрдВрдв рдкрд╛рдПрдВрдЧреЗ .
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдореЙрдбреНрдпреВрд▓ рдЦреЛрдЬ рдкрдереЛрдВ рдореЗрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╣реЗрд░рдлреЗрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдЖрдк рд╕рдореБрджрд╛рдп рдореЗрдВ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордзреБрдордХреНрдЦреА рд╣реЛ рд╕рдХрддреЗ
рдЬрдм рдЖрдк .js
рдлрд╝рд╛рдЗрд▓ рдХреЛ <script>
рдЯреИрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдПрдореНрдмреЗрдб рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП
<body>
<h1>Electron Test</h1>
<script src="resource://js/main.js"></script>
</body>
рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдмрд░рд╛рдмрд░ рд╣реИ
<body>
<h1>Electron Test</h1>
<script>
const test = require('./test'); // Error: Cannot find module './test'
test.sayHello();
</script>
</body>
рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ ./test
рдХреЛ index.html
рд╕рд╛рдкреЗрдХреНрд╖ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рди рдХрд┐ js/main.js
рд╕рд╛рдкреЗрдХреНрд╖ред рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
<body>
<h1>Electron Test</h1>
<script>
require('../js/main.js');
</script>
</body>
рдореБрдЭреЗ рдпрд╣ рд╕рдорд╛рдзрд╛рди рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдорд┐рд▓рд╛ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдпрд╣ рдЪрд┐рдВрддрд╛ рдХрд╛ рд╡рд┐рд╖рдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
WEB_FOLDER рдореЗрдВ index.html рдФрд░ рдЕрдиреНрдп рд╕рднреА рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрджрд░реНрднрд┐рдд рд╕рд╛рдордЧреНрд░реА рд╢рд╛рдорд┐рд▓ рд╣реИред
рдЖрдк рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрд░ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдЖрдкрдХреА рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдлрд╝рд╛рдЗрд▓ рдЙрдк рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдЕрдВрджрд░ рд╕реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ (рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╡реЗрдм)
function createWindow() {
const WEB_FOLDER = 'web';
const PROTOCOL = 'file';
electron.protocol.interceptFileProtocol(PROTOCOL, (request, callback) => {
// // Strip protocol
let url = request.url.substr(PROTOCOL.length + 1);
// Build complete path for node require function
url = path.join(__dirname, WEB_FOLDER, url);
// Replace backslashes by forward slashes (windows)
// url = url.replace(/\\/g, '/');
url = path.normalize(url);
console.log(url);
callback({path: url});
});
// Create the browser window.
mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: false
}
});
// and load the index.html of the app.
mainWindow.loadURL(url.format({
pathname: 'index.html',
protocol: PROTOCOL + ':',
slashes: true
}));
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдореБрдЭреЗ рдпрд╣ рд╕рдорд╛рдзрд╛рди рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдорд┐рд▓рд╛ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдпрд╣ рдЪрд┐рдВрддрд╛ рдХрд╛ рд╡рд┐рд╖рдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
WEB_FOLDER рдореЗрдВ index.html рдФрд░ рдЕрдиреНрдп рд╕рднреА рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрджрд░реНрднрд┐рдд рд╕рд╛рдордЧреНрд░реА рд╢рд╛рдорд┐рд▓ рд╣реИред
рдЖрдк рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрд░ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдЖрдкрдХреА рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдлрд╝рд╛рдЗрд▓ рдЙрдк рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдЕрдВрджрд░ рд╕реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ (рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╡реЗрдм)