electron
Advanced tools
Comparing version
26
cli.js
#!/usr/bin/env node | ||
var electron = require('./') | ||
const electron = require('./'); | ||
var proc = require('child_process') | ||
const proc = require('child_process'); | ||
var child = proc.spawn(electron, process.argv.slice(2), {stdio: 'inherit', windowsHide: false}) | ||
child.on('close', function (code) { | ||
process.exit(code) | ||
}) | ||
const child = proc.spawn(electron, process.argv.slice(2), { stdio: 'inherit', windowsHide: false }); | ||
child.on('close', function (code, signal) { | ||
if (code === null) { | ||
console.error(electron, 'exited with signal', signal); | ||
process.exit(1); | ||
} | ||
process.exit(code); | ||
}); | ||
@@ -15,8 +19,8 @@ const handleTerminationSignal = function (signal) { | ||
if (!child.killed) { | ||
child.kill(signal) | ||
child.kill(signal); | ||
} | ||
}) | ||
} | ||
}); | ||
}; | ||
handleTerminationSignal('SIGINT') | ||
handleTerminationSignal('SIGTERM') | ||
handleTerminationSignal('SIGINT'); | ||
handleTerminationSignal('SIGTERM'); |
25
index.js
@@ -1,10 +0,21 @@ | ||
var fs = require('fs') | ||
var path = require('path') | ||
const fs = require('fs'); | ||
const path = require('path'); | ||
var pathFile = path.join(__dirname, 'path.txt') | ||
const pathFile = path.join(__dirname, 'path.txt'); | ||
if (fs.existsSync(pathFile)) { | ||
module.exports = path.join(__dirname, fs.readFileSync(pathFile, 'utf-8')) | ||
} else { | ||
throw new Error('Electron failed to install correctly, please delete node_modules/electron and try installing again') | ||
function getElectronPath () { | ||
let executablePath; | ||
if (fs.existsSync(pathFile)) { | ||
executablePath = fs.readFileSync(pathFile, 'utf-8'); | ||
} | ||
if (process.env.ELECTRON_OVERRIDE_DIST_PATH) { | ||
return path.join(process.env.ELECTRON_OVERRIDE_DIST_PATH, executablePath || 'electron'); | ||
} | ||
if (executablePath) { | ||
return path.join(__dirname, 'dist', executablePath); | ||
} else { | ||
throw new Error('Electron failed to install correctly, please delete node_modules/electron and try installing again'); | ||
} | ||
} | ||
module.exports = getElectronPath(); |
120
install.js
#!/usr/bin/env node | ||
var version = require('./package').version | ||
const { version } = require('./package'); | ||
var fs = require('fs') | ||
var os = require('os') | ||
var path = require('path') | ||
var extract = require('extract-zip') | ||
var download = require('electron-download') | ||
const childProcess = require('child_process'); | ||
const fs = require('fs'); | ||
const os = require('os'); | ||
const path = require('path'); | ||
const extract = require('extract-zip'); | ||
const { downloadArtifact } = require('@electron/get'); | ||
var installedVersion = null | ||
try { | ||
installedVersion = fs.readFileSync(path.join(__dirname, 'dist', 'version'), 'utf-8').replace(/^v/, '') | ||
} catch (ignored) { | ||
// do nothing | ||
if (process.env.ELECTRON_SKIP_BINARY_DOWNLOAD) { | ||
process.exit(0); | ||
} | ||
var platformPath = getPlatformPath() | ||
const platformPath = getPlatformPath(); | ||
if (installedVersion === version && fs.existsSync(path.join(__dirname, platformPath))) { | ||
process.exit(0) | ||
if (isInstalled()) { | ||
process.exit(0); | ||
} | ||
var mirror | ||
const platform = process.env.npm_config_platform || process.platform; | ||
let arch = process.env.npm_config_arch || process.arch; | ||
if (version.indexOf('nightly') !== -1) { | ||
mirror = 'https://github.com/electron/nightlies/releases/download/v' | ||
if (platform === 'darwin' && process.platform === 'darwin' && arch === 'x64' && | ||
process.env.npm_config_arch === undefined) { | ||
// When downloading for macOS ON macOS and we think we need x64 we should | ||
// check if we're running under rosetta and download the arm64 version if appropriate | ||
try { | ||
const output = childProcess.execSync('sysctl -in sysctl.proc_translated'); | ||
if (output.toString().trim() === '1') { | ||
arch = 'arm64'; | ||
} | ||
} catch { | ||
// Ignore failure | ||
} | ||
} | ||
// downloads if not cached | ||
download({ | ||
cache: process.env.electron_config_cache, | ||
version: version, | ||
platform: process.env.npm_config_platform, | ||
arch: process.env.npm_config_arch, | ||
strictSSL: process.env.npm_config_strict_ssl === 'true', | ||
downloadArtifact({ | ||
version, | ||
artifactName: 'electron', | ||
force: process.env.force_no_cache === 'true', | ||
quiet: process.env.npm_config_loglevel === 'silent' || process.env.CI, | ||
mirror | ||
}, extractFile) | ||
cacheRoot: process.env.electron_config_cache, | ||
checksums: process.env.electron_use_remote_checksums ? undefined : require('./checksums.json'), | ||
platform, | ||
arch | ||
}).then(extractFile).catch(err => { | ||
console.error(err.stack); | ||
process.exit(1); | ||
}); | ||
// unzips and makes path.txt point at the correct executable | ||
function extractFile (err, zipPath) { | ||
if (err) return onerror(err) | ||
extract(zipPath, {dir: path.join(__dirname, 'dist')}, function (err) { | ||
if (err) return onerror(err) | ||
fs.writeFile(path.join(__dirname, 'path.txt'), platformPath, function (err) { | ||
if (err) return onerror(err) | ||
}) | ||
}) | ||
function isInstalled () { | ||
try { | ||
if (fs.readFileSync(path.join(__dirname, 'dist', 'version'), 'utf-8').replace(/^v/, '') !== version) { | ||
return false; | ||
} | ||
if (fs.readFileSync(path.join(__dirname, 'path.txt'), 'utf-8') !== platformPath) { | ||
return false; | ||
} | ||
} catch (ignored) { | ||
return false; | ||
} | ||
const electronPath = process.env.ELECTRON_OVERRIDE_DIST_PATH || path.join(__dirname, 'dist', platformPath); | ||
return fs.existsSync(electronPath); | ||
} | ||
function onerror (err) { | ||
throw err | ||
// unzips and makes path.txt point at the correct executable | ||
function extractFile (zipPath) { | ||
const distPath = process.env.ELECTRON_OVERRIDE_DIST_PATH || path.join(__dirname, 'dist'); | ||
return extract(zipPath, { dir: path.join(__dirname, 'dist') }).then(() => { | ||
// If the zip contains an "electron.d.ts" file, | ||
// move that up | ||
const srcTypeDefPath = path.join(distPath, 'electron.d.ts'); | ||
const targetTypeDefPath = path.join(__dirname, 'electron.d.ts'); | ||
const hasTypeDefinitions = fs.existsSync(srcTypeDefPath); | ||
if (hasTypeDefinitions) { | ||
fs.renameSync(srcTypeDefPath, targetTypeDefPath); | ||
} | ||
// Write a "path.txt" file. | ||
return fs.promises.writeFile(path.join(__dirname, 'path.txt'), platformPath); | ||
}); | ||
} | ||
function getPlatformPath () { | ||
var platform = process.env.npm_config_platform || os.platform() | ||
const platform = process.env.npm_config_platform || os.platform(); | ||
switch (platform) { | ||
case 'mas': | ||
case 'darwin': | ||
return 'dist/Electron.app/Contents/MacOS/Electron' | ||
return 'Electron.app/Contents/MacOS/Electron'; | ||
case 'freebsd': | ||
case 'openbsd': | ||
case 'linux': | ||
return 'dist/electron' | ||
return 'electron'; | ||
case 'win32': | ||
return 'dist/electron.exe' | ||
return 'electron.exe'; | ||
default: | ||
throw new Error('Electron builds are not available on platform: ' + platform) | ||
throw new Error('Electron builds are not available on platform: ' + platform); | ||
} | ||
} |
{ | ||
"scripts": { | ||
"cache-clean": "rm -rf ~/.electron && rm -rf dist", | ||
"postinstall": "node install.js", | ||
"pretest": "npm run cache-clean", | ||
"test": "standard" | ||
}, | ||
"main": "index.js", | ||
"types": "electron.d.ts", | ||
"bin": { | ||
"electron": "cli.js" | ||
}, | ||
"main": "index.js", | ||
"types": "electron.d.ts", | ||
"scripts": { | ||
"postinstall": "node install.js" | ||
}, | ||
"dependencies": { | ||
"@types/node": "^8.0.24", | ||
"electron-download": "^3.0.1", | ||
"extract-zip": "^1.0.3" | ||
"@electron/get": "^2.0.0", | ||
"@types/node": "^16.11.26", | ||
"extract-zip": "^2.0.1" | ||
}, | ||
"devDependencies": { | ||
"home-path": "^0.1.1", | ||
"path-exists": "^2.0.0", | ||
"standard": "^5.4.1" | ||
"engines": { | ||
"node": ">= 12.20.55" | ||
}, | ||
"directories": { | ||
"test": "test" | ||
}, | ||
"name": "electron", | ||
"version": "2.0.18", | ||
"repository": "https://github.com/electron/electron", | ||
@@ -34,3 +25,4 @@ "description": "Build cross platform desktop apps with JavaScript, HTML, and CSS", | ||
"electron" | ||
] | ||
], | ||
"version": "23.3.13" | ||
} |
[](https://electronjs.org) | ||
[](https://circleci.com/gh/electron/electron/tree/main) | ||
[](https://ci.appveyor.com/project/electron-bot/electron-ljo26/branch/main) | ||
[](https://discord.gg/electronjs) | ||
[](https://circleci.com/gh/electron/electron/tree/master) | ||
[](https://windows-ci.electronjs.org/project/AppVeyor/electron/branch/master) | ||
[](https://mac-ci.electronjs.org/blue/organizations/jenkins/Electron%20org%2Felectron/activity?branch=master) | ||
[](https://david-dm.org/electron/electron?type=dev) | ||
[](https://atom-slack.herokuapp.com/) | ||
:memo: Available Translations: 🇨🇳 🇧🇷 🇪🇸 🇯🇵 🇷🇺 🇫🇷 🇺🇸 🇩🇪. | ||
View these docs in other languages on our [Crowdin](https://crowdin.com/project/electron) project. | ||
:memo: Available Translations: 🇨🇳 🇹🇼 🇧🇷 🇪🇸 🇰🇷 🇯🇵 🇷🇺 🇫🇷 🇹🇭 🇳🇱 🇹🇷 🇮🇩 🇺🇦 🇨🇿 🇮🇹. | ||
View these docs in other languages at [electron/electron-i18n](https://github.com/electron/electron-i18n/tree/master/content/). | ||
The Electron framework lets you write cross-platform desktop applications | ||
@@ -18,7 +15,7 @@ using JavaScript, HTML and CSS. It is based on [Node.js](https://nodejs.org/) and | ||
Follow [@ElectronJS](https://twitter.com/electronjs) on Twitter for important | ||
Follow [@electronjs](https://twitter.com/electronjs) on Twitter for important | ||
announcements. | ||
This project adheres to the Contributor Covenant | ||
[code of conduct](https://github.com/electron/electron/tree/master/CODE_OF_CONDUCT.md). | ||
[code of conduct](https://github.com/electron/electron/tree/main/CODE_OF_CONDUCT.md). | ||
By participating, you are expected to uphold this code. Please report unacceptable | ||
@@ -34,15 +31,28 @@ behavior to [coc@electronjs.org](mailto:coc@electronjs.org). | ||
```sh | ||
npm install electron --save-dev --save-exact | ||
npm install electron --save-dev | ||
``` | ||
The `--save-exact` flag is recommended as Electron does not follow semantic | ||
versioning. For info on how to manage Electron versions in your apps, see | ||
For more installation options and troubleshooting tips, see | ||
[installation](docs/tutorial/installation.md). For info on how to manage Electron versions in your apps, see | ||
[Electron versioning](docs/tutorial/electron-versioning.md). | ||
For more installation options and troubleshooting tips, see | ||
[installation](docs/tutorial/installation.md). | ||
## Platform support | ||
## Quick start | ||
Each Electron release provides binaries for macOS, Windows, and Linux. | ||
Clone and run the | ||
* macOS (High Sierra and up): Electron provides 64-bit Intel and ARM binaries for macOS. Apple Silicon support was added in Electron 11. | ||
* Windows (Windows 10 and up): Electron provides `ia32` (`x86`), `x64` (`amd64`), and `arm64` binaries for Windows. Windows on ARM support was added in Electron 5.0.8. Support for Windows 7, 8 and 8.1 was [removed in Electron 23, in line with Chromium's Windows deprecation policy](https://www.electronjs.org/blog/windows-7-to-8-1-deprecation-notice). | ||
* Linux: The prebuilt binaries of Electron are built on Ubuntu 20.04. They have also been verified to work on: | ||
* Ubuntu 14.04 and newer | ||
* Fedora 24 and newer | ||
* Debian 8 and newer | ||
## Quick start & Electron Fiddle | ||
Use [`Electron Fiddle`](https://github.com/electron/fiddle) | ||
to build, run, and package small Electron experiments, to see code examples for all of Electron's APIs, and | ||
to try out different versions of Electron. It's designed to make the start of your journey with | ||
Electron easier. | ||
Alternatively, clone and run the | ||
[electron/electron-quick-start](https://github.com/electron/electron-quick-start) | ||
@@ -60,8 +70,6 @@ repository to see a minimal Electron app in action: | ||
- [electronjs.org/docs](https://electronjs.org/docs) - all of Electron's documentation | ||
- [electron/electron-quick-start](https://github.com/electron/electron-quick-start) - a very basic starter Electron app | ||
- [electronjs.org/community#boilerplates](https://electronjs.org/community#boilerplates) - sample starter apps created by the community | ||
- [electron/simple-samples](https://github.com/electron/simple-samples) - small applications with ideas for taking them further | ||
- [electron/electron-api-demos](https://github.com/electron/electron-api-demos) - an Electron app that teaches you how to use Electron | ||
- [hokein/electron-sample-apps](https://github.com/hokein/electron-sample-apps) - small demo apps for the various Electron APIs | ||
* [electronjs.org/docs](https://electronjs.org/docs) - All of Electron's documentation | ||
* [electron/fiddle](https://github.com/electron/fiddle) - A tool to build, run, and package small Electron experiments | ||
* [electron/electron-quick-start](https://github.com/electron/electron-quick-start) - A very basic starter Electron app | ||
* [electronjs.org/community#boilerplates](https://electronjs.org/community#boilerplates) - Sample starter apps created by the community | ||
@@ -87,17 +95,25 @@ ## Programmatic usage | ||
- [China](https://npm.taobao.org/mirrors/electron) | ||
* [China](https://npmmirror.com/mirrors/electron/) | ||
## Documentation Translations | ||
See the [Advanced Installation Instructions](https://www.electronjs.org/docs/latest/tutorial/installation#mirror) to learn how to use a custom mirror. | ||
Find documentation translations in [electron/electron-i18n](https://github.com/electron/electron-i18n). | ||
## Documentation translations | ||
We crowdsource translations for our documentation via [Crowdin](https://crowdin.com/project/electron). | ||
We currently accept translations for Chinese (Simplified), French, German, Japanese, Portuguese, | ||
Russian, and Spanish. | ||
## Contributing | ||
If you are interested in reporting/fixing issues and contributing directly to the code base, please see [CONTRIBUTING.md](CONTRIBUTING.md) for more information on what we're looking for and how to get started. | ||
## Community | ||
Info on reporting bugs, getting help, finding third-party tools and sample apps, | ||
and more can be found in the [support document](docs/tutorial/support.md#finding-support). | ||
and more can be found on the [Community page](https://www.electronjs.org/community). | ||
## License | ||
[MIT](https://github.com/electron/electron/blob/master/LICENSE) | ||
[MIT](https://github.com/electron/electron/blob/main/LICENSE) | ||
When using the Electron or other GitHub logos, be sure to follow the [GitHub logo guidelines](https://github.com/logos). | ||
When using Electron logos, make sure to follow [OpenJS Foundation Trademark Policy](https://openjsf.org/wp-content/uploads/sites/84/2021/01/OpenJS-Foundation-Trademark-Policy-2021-01-12.docx.pdf). |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 3 instances in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 3 instances in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
780497
107.98%0
-100%8
14.29%18194
111.88%116
16%15
25%2
100%+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
Updated
Updated