Rebuild all plugins if a shared lib changed
Summary: Some plugins import from shared directories. These directories are not plugins themselves, therefore the current plugin root searching mechanism does nto work for them. To support plugin reloading for this scenario, we start re-building all plugins if we fail to find a plugin root. Reviewed By: lblasa Differential Revision: D39693820 fbshipit-source-id: 33dd7de4121bd5665a39b0ea96adce4603dc7df0
This commit is contained in:
committed by
Facebook GitHub Bot
parent
6889446bc5
commit
fd811db12b
@@ -18,13 +18,13 @@ import path from 'path';
|
||||
import fs from 'fs-extra';
|
||||
import {spawn, exec} from 'promisify-child-process';
|
||||
import {
|
||||
buildDefaultPlugins,
|
||||
getDefaultPlugins,
|
||||
getWatchFolders,
|
||||
runBuild,
|
||||
stripSourceMapComment,
|
||||
} from 'flipper-pkg-lib';
|
||||
import getAppWatchFolders from './get-app-watch-folders';
|
||||
import {getSourcePlugins, getPluginSourceFolders} from 'flipper-plugin-lib';
|
||||
import type {InstalledPluginDetails} from 'flipper-common';
|
||||
import {getPluginSourceFolders} from 'flipper-plugin-lib';
|
||||
import {
|
||||
appDir,
|
||||
staticDir,
|
||||
@@ -36,34 +36,9 @@ import {
|
||||
} from './paths';
|
||||
import pFilter from 'p-filter';
|
||||
import child from 'child_process';
|
||||
import pMap from 'p-map';
|
||||
import chalk from 'chalk';
|
||||
|
||||
const dev = process.env.NODE_ENV !== 'production';
|
||||
|
||||
// For insiders builds we bundle top 5 popular device plugins,
|
||||
// plus top 10 popular "universal" plugins enabled by more than 100 users.
|
||||
const hardcodedPlugins = new Set<string>([
|
||||
// Popular device plugins
|
||||
'DeviceLogs',
|
||||
'CrashReporter',
|
||||
'MobileBuilds',
|
||||
'Hermesdebuggerrn',
|
||||
'React',
|
||||
// Popular client plugins
|
||||
'Inspector',
|
||||
'Network',
|
||||
'AnalyticsLogging',
|
||||
'GraphQL',
|
||||
'UIPerf',
|
||||
'MobileConfig',
|
||||
'Databases',
|
||||
'FunnelLogger',
|
||||
'Navigation',
|
||||
'Fresco',
|
||||
'Preferences',
|
||||
]);
|
||||
|
||||
export function die(err: Error) {
|
||||
console.error('Script termnated.', err);
|
||||
process.exit(1);
|
||||
@@ -87,52 +62,12 @@ export async function prepareDefaultPlugins(isInsidersBuild: boolean = false) {
|
||||
});
|
||||
console.log('✅ Copied the provided default plugins dir.');
|
||||
} else {
|
||||
const sourcePlugins = await getSourcePlugins();
|
||||
const defaultPlugins = sourcePlugins
|
||||
// we only include headless plugins and a predefined set of regular plugins into insiders release
|
||||
.filter(
|
||||
(p) => !isInsidersBuild || hardcodedPlugins.has(p.id) || p.headless,
|
||||
);
|
||||
await buildDefaultPlugins(defaultPlugins);
|
||||
const defaultPlugins = await getDefaultPlugins(isInsidersBuild);
|
||||
await buildDefaultPlugins(defaultPlugins, dev);
|
||||
}
|
||||
console.log('✅ Prepared default plugins.');
|
||||
}
|
||||
|
||||
async function buildDefaultPlugins(defaultPlugins: InstalledPluginDetails[]) {
|
||||
if (process.env.FLIPPER_NO_REBUILD_PLUGINS) {
|
||||
console.log(
|
||||
`⚙️ Including ${
|
||||
defaultPlugins.length
|
||||
} plugins into the default plugins list. Skipping rebuilding because "no-rebuild-plugins" option provided. List of default plugins: ${defaultPlugins
|
||||
.map((p) => p.id)
|
||||
.join(', ')}`,
|
||||
);
|
||||
}
|
||||
await pMap(
|
||||
defaultPlugins,
|
||||
async function (plugin) {
|
||||
try {
|
||||
if (!process.env.FLIPPER_NO_REBUILD_PLUGINS) {
|
||||
console.log(
|
||||
`⚙️ Building plugin ${plugin.id} to include it into the default plugins list...`,
|
||||
);
|
||||
await runBuild(plugin.dir, dev);
|
||||
}
|
||||
await fs.ensureSymlink(
|
||||
plugin.dir,
|
||||
path.join(defaultPluginsDir, plugin.name),
|
||||
'junction',
|
||||
);
|
||||
} catch (err) {
|
||||
console.error(`✖ Failed to build plugin ${plugin.id}`, err);
|
||||
}
|
||||
},
|
||||
{
|
||||
concurrency: 16,
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
const minifierConfig = {
|
||||
minifierPath: require.resolve('metro-minify-terser'),
|
||||
minifierConfig: {
|
||||
|
||||
Reference in New Issue
Block a user