UNPKG

electron-forge

Version:

A complete tool for building modern Electron applications

208 lines (180 loc) 9.83 kB
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <base data-ice="baseUrl" href="../../"> <title data-ice="title">api/make.js | API Document</title> <link type="text/css" rel="stylesheet" href="css/style.css"> <link type="text/css" rel="stylesheet" href="css/prettify-tomorrow.css"> <script src="script/prettify/prettify.js"></script> <script src="script/manual.js"></script> </head> <body class="layout-container" data-ice="rootContainer"> <header> <a href="./">Home</a> <a href="identifiers.html">Reference</a> <a href="source.html">Source</a> <a data-ice="repoURL" href="https://github.com/electron-userland/electron-forge" class="repo-url-github">Repository</a> <div class="search-box"> <span> <img src="./image/search.png"> <span class="search-input-edge"></span><input class="search-input"><span class="search-input-edge"></span> </span> <ul class="search-result"></ul> </div> </header> <nav class="navigation" data-ice="nav"><div> <ul> <li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-import">import</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-init">init</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-install">install</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-lint">lint</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-make">make</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-package">package</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-publish">publish</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-start">start</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-typedef">T</span><span data-ice="name"><span><a href="typedef/index.html#static-typedef-ImportOptions">ImportOptions</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-typedef">T</span><span data-ice="name"><span><a href="typedef/index.html#static-typedef-InitOptions">InitOptions</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-typedef">T</span><span data-ice="name"><span><a href="typedef/index.html#static-typedef-InstallOptions">InstallOptions</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-typedef">T</span><span data-ice="name"><span><a href="typedef/index.html#static-typedef-LintOptions">LintOptions</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-typedef">T</span><span data-ice="name"><span><a href="typedef/index.html#static-typedef-MakeOptions">MakeOptions</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-typedef">T</span><span data-ice="name"><span><a href="typedef/index.html#static-typedef-PackageOptions">PackageOptions</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-typedef">T</span><span data-ice="name"><span><a href="typedef/index.html#static-typedef-PublishOptions">PublishOptions</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-typedef">T</span><span data-ice="name"><span><a href="typedef/index.html#static-typedef-StartOptions">StartOptions</a></span></span></li> </ul> </div> </nav> <div class="content" data-ice="content"><h1 data-ice="title">api/make.js</h1> <pre class="source-code line-number raw-source-code"><code class="prettyprint linenums" data-ice="content">import &apos;colors&apos;; import fs from &apos;fs-promise&apos;; import path from &apos;path&apos;; import asyncOra from &apos;../util/ora-handler&apos;; import electronHostArch from &apos;../util/electron-host-arch&apos;; import getForgeConfig from &apos;../util/forge-config&apos;; import readPackageJSON from &apos;../util/read-package-json&apos;; import requireSearch from &apos;../util/require-search&apos;; import resolveDir from &apos;../util/resolve-dir&apos;; import packager from &apos;./package&apos;; /** * @typedef {Object} MakeOptions * @property {string} [dir=process.cwd()] The path to the app from which distributables are generated * @property {boolean} [interactive=false] Whether to use sensible defaults or prompt the user visually * @property {boolean} [skipPackage=false] Whether to skip the pre-make packaging step * @property {Array&lt;string&gt;} [overrideTargets] An array of make targets to override your forge config * @property {string} [arch=host architecture] The target architecture * @property {string} [platform=process.platform] The target platform. NOTE: This is limited to be the current platform at the moment */ /** * Make distributables for an Electron application. * * @param {MakeOptions} providedOptions - Options for the make method * @return {Promise} Will resolve when the make process is complete */ export default async (providedOptions = {}) =&gt; { // eslint-disable-next-line prefer-const, no-unused-vars let { dir, interactive, skipPackage, overrideTargets, arch, platform } = Object.assign({ dir: process.cwd(), interactive: false, skipPackage: false, arch: electronHostArch(), platform: process.platform, }, providedOptions); asyncOra.interactive = interactive; let forgeConfig; await asyncOra(&apos;Resolving Forge Config&apos;, async () =&gt; { dir = await resolveDir(dir); if (!dir) { // eslint-disable-next-line no-throw-literal throw &apos;Failed to locate makeable Electron application&apos;; } forgeConfig = await getForgeConfig(dir); }); if (platform &amp;&amp; platform !== process.platform &amp;&amp; !(process.platform === &apos;darwin&apos; &amp;&amp; platform === &apos;mas&apos;)) { console.error(&apos;You can not &quot;make&quot; for a platform other than your systems platform&apos;.red); process.exit(1); } if (!skipPackage) { console.info(&apos;We need to package your application before we can make it&apos;.green); await packager({ dir, interactive, arch, platform, }); } else { console.warn(&apos;WARNING: Skipping the packaging step, this could result in an out of date build&apos;.red); } const declaredArch = arch; const declaredPlatform = platform; let targets = forgeConfig.make_targets[declaredPlatform]; if (overrideTargets) { targets = overrideTargets; } console.info(&apos;Making for the following targets:&apos;, `${targets.join(&apos;, &apos;)}`.cyan); let targetArchs = [declaredArch]; if (declaredArch === &apos;all&apos;) { switch (process.platform) { case &apos;darwin&apos;: targetArchs = [&apos;x64&apos;]; break; case &apos;linux&apos;: targetArchs = [&apos;ia32&apos;, &apos;x64&apos;, &apos;armv7l&apos;]; break; case &apos;win32&apos;: default: targetArchs = [&apos;ia32&apos;, &apos;x64&apos;]; break; } } const packageJSON = await readPackageJSON(dir); const appName = packageJSON.productName || packageJSON.name; const outputs = []; for (const targetArch of targetArchs) { const packageDir = path.resolve(dir, `out/${appName}-${declaredPlatform}-${targetArch}`); if (!(await fs.exists(packageDir))) { throw new Error(`Couldn&apos;t find packaged app at: ${packageDir}`); } for (const target of targets) { // eslint-disable-next-line no-loop-func await asyncOra(`Making for target: ${target.cyan} - On platform: ${declaredPlatform.cyan} - For arch: ${targetArch.cyan}`, async () =&gt; { const maker = requireSearch(path.resolve(__dirname, &apos;..&apos;), [ `./makers/${process.platform}/${target}.js`, `./makers/generic/${target}.js`, `electron-forge-maker-${target}`, ]); if (!maker) { // eslint-disable-next-line no-throw-literal throw `Could not find a build target with the name: ${target} for the platform: ${declaredPlatform}`; } try { outputs.push(await (maker.default || maker)(packageDir, appName, targetArch, forgeConfig, packageJSON)); } catch (err) { if (err) { // eslint-disable-next-line no-throw-literal throw { message: `An error occured while making for target: ${target}`, stack: `${err.message}\n${err.stack}`, }; } else { throw new Error(`An unknown error occured while making for target: ${target}`); } } }); } } return outputs; }; </code></pre> </div> <footer class="footer"> Generated by <a href="https://esdoc.org">ESDoc<span data-ice="esdocVersion">(0.5.2)</span><img src="./image/esdoc-logo-mini-black.png"></a> </footer> <script src="script/search_index.js"></script> <script src="script/search.js"></script> <script src="script/pretty-print.js"></script> <script src="script/inherited-summary.js"></script> <script src="script/test-summary.js"></script> <script src="script/inner-link.js"></script> <script src="script/patch-for-local.js"></script> </body> </html>