Expose a subset of flipper-plugin to flipper server
Summary: Flipper plugins rely on 'flipper-plugin' package being accessible from 'global'. Expose a subset (without UI stuff) of flipper-plugin to server add-ons Reviewed By: mweststrate Differential Revision: D34400811 fbshipit-source-id: e0079ddfa67e66c1b24ab02d7682917ddfc84aaf
This commit is contained in:
committed by
Facebook GitHub Bot
parent
9449f61adb
commit
aec05533d7
@@ -10,10 +10,20 @@
|
||||
import {CallExpression} from '@babel/types';
|
||||
import {NodePath} from '@babel/traverse';
|
||||
|
||||
import {resolve} from 'path';
|
||||
import {BUILTINS} from './electron-requires';
|
||||
|
||||
const pluginsRootDir = resolve(__dirname, '../../plugins');
|
||||
|
||||
function isPlugin(path: string) {
|
||||
// We should bundle dependencies for plugins
|
||||
return path.startsWith(pluginsRootDir);
|
||||
}
|
||||
|
||||
module.exports = () => ({
|
||||
name: 'change-require-to-electronRequire-in-server',
|
||||
visitor: {
|
||||
CallExpression(path: NodePath<CallExpression>) {
|
||||
CallExpression(path: NodePath<CallExpression>, state: any) {
|
||||
const node = path.node;
|
||||
if (
|
||||
node.type === 'CallExpression' &&
|
||||
@@ -25,13 +35,22 @@ module.exports = () => ({
|
||||
const source = node.arguments[0].value;
|
||||
if (
|
||||
// relative files should be bundled
|
||||
!source.startsWith('./') &&
|
||||
!source.startsWith('../') &&
|
||||
source.startsWith('./') ||
|
||||
source.startsWith('../') ||
|
||||
// other packages from the workspace should be bundled up and transformed!
|
||||
!source.startsWith('flipper-')
|
||||
source.startsWith('flipper-') ||
|
||||
// Dependencies for bundled plugins (server add-ons) should be included
|
||||
(isPlugin(state.file.opts.filename) &&
|
||||
// yet we should exclude built-ins
|
||||
!(
|
||||
BUILTINS.includes(source) ||
|
||||
BUILTINS.some((moduleName) => source.startsWith(`${moduleName}/`))
|
||||
))
|
||||
) {
|
||||
node.callee.name = 'electronRequire';
|
||||
return;
|
||||
}
|
||||
|
||||
node.callee.name = 'electronRequire';
|
||||
}
|
||||
if (
|
||||
node.callee.type === 'MemberExpression' &&
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
import {CallExpression, identifier} from '@babel/types';
|
||||
import {NodePath} from '@babel/traverse';
|
||||
|
||||
const BUILTINS = [
|
||||
export const BUILTINS = [
|
||||
'electron',
|
||||
'buffer',
|
||||
'child_process',
|
||||
|
||||
@@ -22,7 +22,11 @@ const presets = [
|
||||
];
|
||||
|
||||
// In DEV builds, we keep node_modules as is, as to not waste resources on trying to bundle them
|
||||
const plugins = [require('./electron-requires-server'), require('./fb-stubs')];
|
||||
const plugins = [
|
||||
require('./electron-requires-server'),
|
||||
require('./plugin-flipper-requires'),
|
||||
require('./fb-stubs'),
|
||||
];
|
||||
|
||||
module.exports = {
|
||||
transform,
|
||||
|
||||
@@ -26,7 +26,11 @@ const presets = [
|
||||
// This is also the reason that all server deps are DEV deps
|
||||
// electron-requires makes sure that *only* requires of built in node_modules are using "electronRequire"
|
||||
// (which effectively makes them external, as electronRequire === require, but not rolled up with Metro)
|
||||
const plugins = [require('./electron-requires'), require('./fb-stubs')];
|
||||
const plugins = [
|
||||
require('./electron-requires'),
|
||||
require('./plugin-flipper-requires'),
|
||||
require('./fb-stubs'),
|
||||
];
|
||||
|
||||
module.exports = {
|
||||
transform,
|
||||
|
||||
Reference in New Issue
Block a user