Node.js 我可以在全局命名空间中公开commonjs模块对象吗?

Node.js 我可以在全局命名空间中公开commonjs模块对象吗?,node.js,webpack,commonjs,Node.js,Webpack,Commonjs,我们正在使用nodejs/webpack构建一个react/flux应用程序,因此我们所有的新代码都是用commonjs模块编写的 在一些孤立的情况下,我们需要从遗留代码中的一个commonjs模块访问对象。有没有办法做到这一点…是的,我想这很恶心。我们最终会将所有代码迁移到commonjs模块,但这只是权宜之计。在遗留JS代码(不使用commonjs)中,在全局命名空间中创建一个函数: /* Legacy code NOT using CommonJS */ function getCommo

我们正在使用nodejs/webpack构建一个react/flux应用程序,因此我们所有的新代码都是用commonjs模块编写的

在一些孤立的情况下,我们需要从遗留代码中的一个commonjs模块访问对象。有没有办法做到这一点…是的,我想这很恶心。我们最终会将所有代码迁移到commonjs模块,但这只是权宜之计。

在遗留JS代码(不使用commonjs)中,在全局命名空间中创建一个函数:

/* Legacy code NOT using CommonJS */
function getCommonJSObject(obj) {
...
}
在CommonJS代码中,您可以测试这个全局函数,如果它存在,则调用它,传递您需要访问的对象

/* CommonJS object */
if(window['getCommonJSObject']){
  window.getCommonJSObject(obj);
}

通过这样做,我们仍然可以遵循应用程序中遗留javascript代码的流量模式。如果有更好的方法,请告诉我们。但是这是一个方便的解决方法。

使用
window.YourNamespace.YourObject=YourObject就在
返回对象之前?嗯,我尝试了window.myObject,但没有成功。我没有试着把它放到一个名称空间中……这会有什么不同吗?我要试一试;那为什么不起作用?怎么了?您可以在CommonJS模块中访问
窗口
,这应该不是问题所在。这可能是时间问题。您的代码尝试在执行CommonJS模块之前访问全局对象。