如何在Ember.js中禁用弃用警告?

man*_*ske 13 ember.js

我写了一个使用Ember Data的应用程序.它正在通过所有测试并按预期运行,但是,有些事情导致重复的弃用警告被抛入控制台.

我想知道如何在Ember中禁用这些警告.

VNa*_*haM 17

你可以在application.js文件中执行Ember.deprecate = function(){},这应该禁用ember弃用警告.


Sha*_*rey 11

考虑弃用总是好的,但如果你想完全关闭它们,请将以下两行添加到主app.js文件中.

Ember.deprecate = function(){};
Ember.warn = function(i){};
Run Code Online (Sandbox Code Playgroud)


igo*_*s07 6

我的建议在这里,所以你不会完全错过弃用警告 - 它们是有原因的,对吧?

这些是deprecate可以做的简化版本,但是记录到DEBUG(因此您可以轻松地过滤它们)并且没有堆栈跟踪(为简单起见).他们也不会显示重复的消息:

CoffeeScript:

Ember.deprecate = (->
  already_shown = []
  (msg, test, opt)->
    return false if test
    if already_shown.indexOf(msg) == -1
      warning = "DEPRECATION: #{msg}"
      warning += " See: #{opt.url}" if opt.url
      console.debug warning
    already_shown.push msg
)()
Run Code Online (Sandbox Code Playgroud)

JS:

Ember.deprecate = (function() {
  var already_shown = [];
  return function (msg, test, opt) {
    if (test) return false;
    if (already_shown.indexOf(msg) === -1) {
      var warning = 'DEPRECATION: ' + msg;
      if (opt.url) {
        warning += ' See: ' + opt.url;
      }
      console.debug(warning);
    }
    already_shown.push(msg);
  };
})();
Run Code Online (Sandbox Code Playgroud)


Kin*_*iro 6

修改为Ember 2.3版本(感谢igorsantos07)

const alreadyShownFactory = () => {
  let alreadyShown = [];
  return (msg, test, opt) => {
    if (test)
      return false;

    if( alreadyShown.indexOf(msg) === -1 ) {
      let warning = 'DEPRECATION: ' + msg;
      if(opt && opt.url) {
        warning += ' See: ' + opt.url;
      }
      console.warn(warning);
      alreadyShown.push(msg);
    }
  };
};
Ember.deprecate = alreadyShownFactory();
Ember.warn = alreadyShownFactory();

//see https://guides.emberjs.com/v2.3.0/configuring-ember/handling-deprecations/
Ember.Debug.registerDeprecationHandler((() => {
  let alreadyShown = [];
  return (message, options, next) => {
    if(alreadyShown.indexOf(message) === -1) {
      next(message, options);
      alreadyShown.push(message);
    }
  };
})());
Run Code Online (Sandbox Code Playgroud)