split build process
Summary: Moving a couple of build function from `build-release` to `build-utils` so they can be shared between the desktop build process and the headless build process. Reviewed By: passy Differential Revision: D13786575 fbshipit-source-id: df0a0da6d9a643e3e1c65470e1e96254e8966dd9
This commit is contained in:
committed by
Facebook Github Bot
parent
e02d823e5f
commit
78cd40e890
96
scripts/build-utils.js
Normal file
96
scripts/build-utils.js
Normal file
@@ -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,
|
||||
};
|
||||
Reference in New Issue
Block a user