Javascript 网页包替换模块运行时
我有一个相当复杂的场景 我们正在用React构建一个桌面应用程序,它用Electron包装,Webpack负责Babel的透明和分块 应用程序从cms接收配置数据 配置的一部分可能是javascript类,它需要覆盖驻留在应用程序中的javascript类。CMS中指定的JS代码将是普通Javascript代码(ES6/7/8与我们用于应用程序的代码相同) 我在这里看到两个问题:Javascript 网页包替换模块运行时,javascript,webpack,babeljs,Javascript,Webpack,Babeljs,我有一个相当复杂的场景 我们正在用React构建一个桌面应用程序,它用Electron包装,Webpack负责Babel的透明和分块 应用程序从cms接收配置数据 配置的一部分可能是javascript类,它需要覆盖驻留在应用程序中的javascript类。CMS中指定的JS代码将是普通Javascript代码(ES6/7/8与我们用于应用程序的代码相同) 我在这里看到两个问题: 如何仅传输这一个类和 如何在应用程序的运行时替换它 这可能吗 关于如果使用“应用程序从cms接收配置数据。”您的意思
应用程序从cms接收配置数据。
”您的意思是运行时数据,那么,由于网页包
在编译时起作用,它无法帮助您传输/替换代码()
如果您的数据可以在编译时从CMS
中获取,那么请注意您可以
module.exports=函数webpackConfig(env){
常量配置={
上下文:_dirname,
插件:[]
//等等。。。
};
返回CMS
.fetchConfig()
。然后(cmsConfigs=>{
常量变量={
replaceClass:JSON.stringify(cmsConfigs.classired.toString())
};
configs.plugins.push(新的webpack.DefinePlugin(vars));
返回配置;
})
;
}
Hi。不幸的是,这是第一种情况。我运气不好吗?你可以修改你的CMS来保存运行时代码的传输版本
,并将其作为普通脚本提取到你的应用程序中(如果你可以信任的话)。这也可以是一种替代方法。然而,我不确定加载Transpile类的版本是否会覆盖应用程序中的版本,因为webpack使用标识符加载Transpile代码。因此,如果原始类在内部引用的id为800(例如),则CMS one不能保证收到相同的id。是的,但如果您知道可以覆盖哪个类,那么只需编写一个充当代理的程序。我的问题不是实现模式。如果我们撇开传输问题不谈(假设我这样做并得到传输的代码),问题是我不能在应用程序中计算JS字符串,它会覆盖应用程序中已经存在的类,因为webpack的模块系统包装了所有导出的模块/类