捆绑后从开发控制台访问 javascript 个对象

Access javascript objects from dev console after bundling

我正在开发 React 应用程序并正在学习技巧。我有一个 SPA,其中我的开发环境全部是 运行 in Docker,并且正在使用 Gulp + Watchify、Browserify 和 Babelify 来捆绑我所有的 JS(X) 代码并获取它作为 "bundle.js".

到浏览器

一切正常,除了我无法从我的 Chrome 开发人员工具访问 React 和 ReactDOM 等对象。我确定这是因为它们是 "hidden" 由于它们的捆绑方式,但我不确定如何解决这个问题或获得对它们的访问权限。我总是可以 "window.ReactDOM = ReactDOM" 在我的代码中,但这似乎是一种愚蠢的方式,我预见到想要在控制台中使用更多代码。

我注意到我可以将 "debugger" 添加到我的代码中,这些对象在代码暂停时可用,但一旦它运行我就无法访问这些对象。

这些对象是如何被隐藏起来的,除了断点之外,是否有一种合理的方法来访问它们?

它们是如何隐藏的: 不将变量泄漏到 window/global 范围通常很有用。这很重要,因为不同的文件和不同的库可能具有相同的变量名并相互冲突。通常使用的一个非常简单的技巧是做类似的事情:

// Runs an inline anonymous function
(function(){
     /// Make your variables and run your code here ...
     var a = 1; // Only accessible in this function
})();
console.log(a) // Undefined

^ 以上是常见的 'wrapper' 常见的 JS 文件。

如果您检查 webpack 或其他捆绑器的输出,他们会更进一步并为每个文件关闭。所以捆绑包看起来像:

(function(){
   var files = [
      function(module, require){ var ReactDOM = require('react-dom')... /* file one code */}
      function(module, require){ ... module.exports = localReactDomVar ... }
   ]

   // Webpack magic runs each file and recursively gets dependencies on calls to require...
})();

TLDR: 每个模块都是有意隐藏的,并且无论如何都是匿名的,直到您在代码中执行 var React = require('react') 的那一点。如果您需要在控制台中访问 React 和 ReactDOM,没有比 window.React = React 等更好的方法了