Back out "fallback to handle plugins as commonjs if dynamic import fails"
Summary: Original commit changeset: edef9999ad44 Original Phabricator Diff: D50081726 Reviewed By: passy, lblasa Differential Revision: D50168200 fbshipit-source-id: ba96101bc63409af8ec81857efa81e5aeeb0e3cb
This commit is contained in:
committed by
Facebook GitHub Bot
parent
04a26d2574
commit
9f22952ef2
@@ -185,48 +185,11 @@ export function initializeRenderHost(
|
|||||||
// Typescript transpiles dynamic import calls to `require` in the browser bundle
|
// Typescript transpiles dynamic import calls to `require` in the browser bundle
|
||||||
// We want to explicilty use dynamic import here
|
// We want to explicilty use dynamic import here
|
||||||
const importStr = `import('/${staticPath}?ts=${Date.now()}')`;
|
const importStr = `import('/${staticPath}?ts=${Date.now()}')`;
|
||||||
const nonEsmPluginSymbol = Symbol.for('nonEsmPlugin');
|
|
||||||
const source = await flipperServer.exec('plugin-source', path);
|
const source = await flipperServer.exec('plugin-source', path);
|
||||||
// eslint-disable-next-line no-eval
|
// eslint-disable-next-line no-eval
|
||||||
const importRes = await eval(importStr).catch((e: unknown) => {
|
const importRes = await eval(importStr);
|
||||||
if (
|
|
||||||
e instanceof ReferenceError &&
|
|
||||||
e.message.includes('module is not defined')
|
|
||||||
) {
|
|
||||||
return nonEsmPluginSymbol;
|
|
||||||
} else {
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
if (importRes !== nonEsmPluginSymbol) {
|
|
||||||
return {plugin: importRes, css: source.css};
|
return {plugin: importRes, css: source.css};
|
||||||
}
|
|
||||||
// handle commonjs plugin
|
|
||||||
else {
|
|
||||||
console.log(
|
|
||||||
'[browser-ui][requirePlugin] handle plugin js as CJS',
|
|
||||||
// only log path inside of flipper project
|
|
||||||
path.split('/desktop/', 2).pop(),
|
|
||||||
);
|
|
||||||
let js = source.js;
|
|
||||||
// append source url (to make sure a file entry shows up in the debugger)
|
|
||||||
js += `\n//# sourceURL=file://${path}`;
|
|
||||||
if (isProduction()) {
|
|
||||||
// and source map url (to get source code if available)
|
|
||||||
js += `\n//# sourceMappingURL=file://${path}.map`;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Plugins are compiled as typical CJS modules, referring to the global
|
|
||||||
// 'module', which we'll make available by loading the source into a closure that captures 'module'.
|
|
||||||
// Note that we use 'eval', and not 'new Function', because the latter will cause the source maps
|
|
||||||
// to be off by two lines (as the function declaration uses two lines in the generated source)
|
|
||||||
// eslint-disable-next-line no-eval
|
|
||||||
const cjsLoader = eval('(module) => {' + js + '\n}');
|
|
||||||
const theModule = {exports: {}};
|
|
||||||
cjsLoader(theModule);
|
|
||||||
return {plugin: theModule.exports, css: source.css};
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
getStaticResourceUrl(path): string {
|
getStaticResourceUrl(path): string {
|
||||||
// the 'static' folder is mounted as static middleware in Express at the root
|
// the 'static' folder is mounted as static middleware in Express at the root
|
||||||
|
|||||||
Reference in New Issue
Block a user