2

我想禁用 console.log 之类的THREE.WebGLRenderer: Context LostOBJLoader: 1.8330078125ms等等。你有什么建议吗?

4

4 回答 4

5

没有内置方法可以禁用这些消息,除了OBJLoader2.setLogging.

像这样的消息对于调试非常有用,不仅在您的开发环境中,而且当您的代码在现场时也是如此。

但是,如果您很难消除这些消息,则可以重定向使用该console对象的日志记录。

// Place this at the start of your code
const log = console.log;
console.log = () => {};
const warn = console.warn;
console.warn = () => {};
const error = console.error;
console.error = () => {};

有了这个,任何调用console.log,console.warn和的东西console.error都会被静音,甚至es6是主文件范围之外的模块。这甚至适用于控制台消息管理器,例如debug.

但是您仍然可以使用重定向函数写入控制台。例如:

// In your code...
log("test message"); // will print "test message" to the console

这仅是因为您将对原始函数的引用保存到变量中,例如const log.

于 2019-11-21T14:52:02.180 回答
2

下载源代码,搜索并替换所有console.logconsole.warnconsole.error消息。重建图书馆。

git clone https://github.com/mrdoob/three.js.git
cd three.js
npm install
find src -type f -name '*.js' -exec sed -i '' s/console\\\./\\/\\/console\\./ {} +
find examples/jsm -type f -name '*.js' -exec sed -i '' s/console\\\./\\/\\/console\\./ {} +
find examples/js -type f -name '*.js' -exec sed -i '' s/console\\\./\\/\\/console\\./ {} +
npm run build

请注意,这些搜索和替换行假定每个控制台行单独位于一行上。

在搜索和替换之后(以及在构建之前),您可以使用以下命令检查结果

git diff

如果结果不正确,您可以使用以下命令将所有文件重置为之前的状态

git reset --hard

然后尝试不同的表达方式或使用您喜欢的文本编辑器的跨文件搜索和替换。

在此处输入图像描述

人们经常抱怨他们不想更改源,但特别是 three.js 可以说是关于更改源。Three 的政策是您应该下载特定版本的 three.js 并编写代码以匹配该特定版本。然后,他们可以自由地使用每个新版本破坏任何东西。他们不努力在版本之间保持向后兼容,因此破解您的版本,但是您需要根据您的需要对其进行破解。

在上述情况下,修改库特别简单,因为您实际上可以将其自动化,因此如果您确实采用了较新的版本,在您修复了所有新的不兼容性之后,您可以再次运行这些步骤。

于 2019-11-22T01:39:48.723 回答
1

简短的回答是这样的,讽刺的是,这是mr.doob 本人建议的代码的衍生

const vrgc = {};

vrgc.console = {
  log: console.log,
  info: console.info,
  warn: console.warn,
  error: console.error,
};

Object.keys(vrgc.console)
.forEach(
  key => {
    console.warn(`hiding console.${key} calls from THREE`)

    console[key] = function() {
      if ( (typeof arguments[ 0 ] === 'string') && (arguments[ 0 ].substr( 0, 5 ) === 'THREE') ) {
          return
          // ignore THREE
      } 
      else {
         const originalFunc = vrgc.console[key];
         originalFunc.apply( console, arguments );
      }
    }
  }
);

不幸的是,这个请求已经有 6 年多的历史了......见这里这里这里这里,等等......

于 2021-01-11T00:16:06.327 回答
0

向 WebGL 渲染器添加日志记录参数。

对于您根本不想记录日志的情况(例如生产环境或测试环境)很有用。保留 true 作为默认值,但认为 false 会是更好的选择?https://github.com/mrdoob/three.js/pull/5835

于 2019-11-21T13:23:30.620 回答