diff --git a/src/NodeModuleFederation/index.js b/src/NodeModuleFederation/index.js index 3eda07c..0a9723b 100644 --- a/src/NodeModuleFederation/index.js +++ b/src/NodeModuleFederation/index.js @@ -24,24 +24,46 @@ const rpcPerformTemplate = ` `; const rpcProcessTemplate = (mfConfig) => ` - function rpcProcess(remote) { - return {get:(request)=> remote.get(request),init:(arg)=>{try {return remote.init({ + function rpcProcess(remoteUrl) { + let initArgs = null; + const init = (remote, arg)=>{ + try { + return remote.init({ ...arg, - ${Object.keys(mfConfig.shared) - .filter( - (item) => - mfConfig.shared[item].singleton && - mfConfig.shared[item].requiredVersion - ) - .map(function (item) { - return `"${item}": { - ["${mfConfig.shared[item].requiredVersion}"]: { - get: () => Promise.resolve().then(() => () => require("${item}")) - } - }`; - }) - .join(",")} - })} catch(e){console.log('remote container already initialized')}}} + ${Object.keys(mfConfig.shared) + .filter( + (item) => + mfConfig.shared[item].singleton && + mfConfig.shared[item].requiredVersion + ) + .map(function (item) { + return `"${item}": { + ["${mfConfig.shared[item].requiredVersion}"]: { + get: () => Promise.resolve().then(() => () => require("${item}")) + } + }`; + }) + .join(",")} + }) + } catch(e) { + console.log('remote container already initialized') + } + }; + return { + get:(request)=> { + return async () => { + // refetch and init + const remote = await rpcPerform(remoteUrl); + const initRes = await init(remote, initArgs); + const getRes = await remote.get(request); + return getRes(); + } + }, + init: (arg) => { + initArgs = arg; + return; + }, + } } `; @@ -54,7 +76,7 @@ function buildRemotes(mfConf) { acc[name] = { external: `external (function() { ${builtinsTemplate} - return rpcPerform("${config}").then(rpcProcess) + return rpcProcess("${config}") }())`, }; return acc; @@ -73,4 +95,4 @@ class NodeModuleFederation { } } -module.exports = NodeModuleFederation; \ No newline at end of file +module.exports = NodeModuleFederation;