Enable Metro caching

Summary:
Enabling Metro cache for dev mode. For release builds we reset the cache.

Cache is used for faster compilation in dev mode for both main and renderer bundles, as well as for plugins.

Currently we have few side effects based on env vars, so cache is invalidated when they are changed. Also the cache is invalidated when transformations are changed (changed code, bumped dependency etc). Also added a script to reset the cache if something is going wrong.

Reviewed By: mweststrate

Differential Revision: D20691464

fbshipit-source-id: 478947d438bd3090f052dbfa6ad5c649523ecacb
This commit is contained in:
Anton Nikolaev
2020-03-30 09:23:09 -07:00
committed by Facebook GitHub Bot
parent d86da8f1d2
commit da7449c20b
18 changed files with 128 additions and 48 deletions

View File

@@ -0,0 +1,44 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
*/
/**
* There are some env vars which affect transformations, so the Metro/Babel cache should be invalidated when at least one of them changed.
* They are used in get-cache-key.ts for cache key generation.
*/
type FlipperEnvVars = {
FLIPPER_HEADLESS?: string;
FLIPPER_FB?: string;
FLIPPER_TEST_RUNNER?: string;
FLIPPER_ELECTRON_VERSION?: string;
NODE_ENV?: string;
};
const flipperEnv = new Proxy(
{
FLIPPER_HEADLESS: undefined,
FLIPPER_FB: undefined,
FLIPPER_TEST_RUNNER: undefined,
FLIPPER_ELECTRON_VERSION: undefined,
NODE_ENV: undefined,
} as FlipperEnvVars,
{
get: function (obj, prop) {
if (typeof prop === 'string') {
return process.env[prop];
} else {
return (obj as any)[prop];
}
},
set: function () {
throw new Error('flipperEnv is read-only');
},
},
);
export default flipperEnv;