diff --git a/scripts/build-release.js b/scripts/build-release.js index 8882503e0..4dfe608b7 100755 --- a/scripts/build-release.js +++ b/scripts/build-release.js @@ -5,12 +5,15 @@ * @format */ const path = require('path'); -const tmp = require('tmp'); const fs = require('fs-extra'); const builder = require('electron-builder'); const Platform = builder.Platform; -const Metro = require('../static/node_modules/metro'); -const compilePlugins = require('../static/compilePlugins'); +const { + buildFolder, + compile, + die, + compileDefaultPlugins, +} = require('./build-utils.js'); function generateManifest(versionNumber) { const filePath = path.join(__dirname, '..', 'dist'); @@ -26,20 +29,6 @@ function generateManifest(versionNumber) { ); } -function buildFolder() { - // eslint-disable-next-line no-console - console.log('Creating build directory'); - return new Promise((resolve, reject) => { - tmp.dir((err, buildFolder) => { - if (err) { - reject(err); - } else { - resolve(buildFolder); - } - }); - }).catch(die); -} - function modifyPackageManifest(buildFolder) { // eslint-disable-next-line no-console console.log('Creating package.json manifest'); @@ -122,45 +111,6 @@ function buildDist(buildFolder) { .catch(die); } -function die(err) { - console.error(err.stack); - process.exit(1); -} - -function compile(buildFolder) { - // eslint-disable-next-line no-console - console.log( - 'Building main bundle', - path.join(__dirname, '..', 'src', 'init.js'), - ); - const projectRoots = path.join(__dirname, '..'); - return Metro.runBuild( - { - reporter: {update: () => {}}, - projectRoot: projectRoots, - watchFolders: [projectRoots], - serializer: {}, - transformer: { - babelTransformerPath: path.join( - __dirname, - '..', - 'static', - 'transforms', - 'index.js', - ), - }, - }, - { - dev: false, - minify: false, - resetCache: true, - sourceMap: true, - entry: path.join(__dirname, '..', 'src', 'init.js'), - out: path.join(buildFolder, 'bundle.js'), - }, - ).catch(die); -} - function copyStaticFolder(buildFolder) { return new Promise((resolve, reject) => { fs.copy( @@ -180,39 +130,13 @@ function copyStaticFolder(buildFolder) { }).catch(die); } -function compileDefaultPlugins(buildFolder) { - const defaultPluginFolder = 'defaultPlugins'; - const defaultPluginDir = path.join(buildFolder, defaultPluginFolder); - return compilePlugins( - null, - [ - path.join(__dirname, '..', 'src', 'plugins'), - path.join(__dirname, '..', 'src', 'fb', 'plugins'), - ], - defaultPluginDir, - {force: true, failSilently: false}, - ) - .then(defaultPlugins => - fs.writeFileSync( - path.join(defaultPluginDir, 'index.json'), - JSON.stringify( - defaultPlugins.map(plugin => ({ - ...plugin, - out: path.join(defaultPluginFolder, path.parse(plugin.out).base), - })), - ), - ), - ) - .catch(die); -} - (async () => { const dir = await buildFolder(); // eslint-disable-next-line no-console console.log('Created build directory', dir); await copyStaticFolder(dir); await compileDefaultPlugins(dir); - await compile(dir); + await compile(dir, path.join(__dirname, '..', 'src', 'init.js')); const versionNumber = await modifyPackageManifest(dir); generateManifest(versionNumber); await buildDist(dir); diff --git a/scripts/build-utils.js b/scripts/build-utils.js new file mode 100644 index 000000000..e72ec3ed7 --- /dev/null +++ b/scripts/build-utils.js @@ -0,0 +1,96 @@ +/** + * Copyright 2018-present Facebook. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * @format + */ + +const Metro = require('../static/node_modules/metro'); +const compilePlugins = require('../static/compilePlugins'); +const tmp = require('tmp'); +const path = require('path'); +const fs = require('fs-extra'); + +function die(err) { + console.error(err.stack); + process.exit(1); +} + +function compileDefaultPlugins(buildFolder) { + const defaultPluginFolder = 'defaultPlugins'; + const defaultPluginDir = path.join(buildFolder, defaultPluginFolder); + return compilePlugins( + null, + [ + path.join(__dirname, '..', 'src', 'plugins'), + path.join(__dirname, '..', 'src', 'fb', 'plugins'), + ], + defaultPluginDir, + {force: true, failSilently: false}, + ) + .then(defaultPlugins => + fs.writeFileSync( + path.join(defaultPluginDir, 'index.json'), + JSON.stringify( + defaultPlugins.map(plugin => ({ + ...plugin, + out: path.join(defaultPluginFolder, path.parse(plugin.out).base), + })), + ), + ), + ) + .catch(die); +} + +function compile(buildFolder, entry) { + // eslint-disable-next-line no-console + console.log('Building main bundle', entry); + + const projectRoots = path.join(__dirname, '..'); + return Metro.runBuild( + { + reporter: {update: () => {}}, + projectRoot: projectRoots, + watchFolders: [projectRoots], + serializer: {}, + transformer: { + babelTransformerPath: path.join( + __dirname, + '..', + 'static', + 'transforms', + 'index.js', + ), + }, + }, + { + dev: false, + minify: false, + resetCache: true, + sourceMap: true, + entry, + out: path.join(buildFolder, 'bundle.js'), + }, + ).catch(die); +} + +function buildFolder() { + // eslint-disable-next-line no-console + console.log('Creating build directory'); + return new Promise((resolve, reject) => { + tmp.dir((err, buildFolder) => { + if (err) { + reject(err); + } else { + resolve(buildFolder); + } + }); + }).catch(die); +} + +module.exports = { + buildFolder, + compile, + die, + compileDefaultPlugins, +};