【问题标题】:Can I expose a commonjs module object in the global namespace?我可以在全局命名空间中公开一个 commonjs 模块对象吗?
【发布时间】:2016-01-29 03:28:00
【问题描述】:

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

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

【问题讨论】:

  • 您尝试过什么?在您的return YourObject; 之前使用window.YourNamespace.YourObject = YourObject; 有什么问题?
  • 嗯,我尝试了 window.myObject,但没有成功。我没有尝试将其放入命名空间中……这会有所不同吗?我会试一试;p
  • 为什么不起作用?有什么错误?您可以在 CommonJS 模块中访问window,这应该不是问题。这可能是一个时间问题。您的代码尝试在执行 CommonJS 模块之前访问全局对象。

标签: node.js webpack commonjs


【解决方案1】:

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

/* Legacy code NOT using CommonJS */
function getCommonJSObject(obj) {
...
}

在 CommonJS 代码中,你可以测试这个全局函数,如果它存在,调用它,传递你需要访问的任何对象。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多