// myassert.js
var assert = require('assert');
if('production' === process.env.mode) {
var nil = function() { };
module.exports = {
equal = nil;
notEqual = nil;
// all the other functions
};
} else {
// a wrapper like that one helps in not polluting the exported object
module.exports = {
equal = function(actual, expected, message) {
assert.equal(actual, expected, message);
},
notEqual = function(actual, expected, message) {
assert.notEqual(actual, expected, message);
},
// all the other functions
}
}
// another_file.js
var assert = require('path_to_myassert/myassert');
// ... your code
assert(true, false);
// ... go on
3条答案
按热度按时间gfttwv5a1#
您绝对不应该将它们保留在“生产”环境中。
如果你在谷歌上搜索一下,就会发现有太多的替代方法可以去除它们。
就我个人而言,我会使用
null object
模式,在单独的文件中实现两个 Package 器:前者将其方法直接Map到由模块assert
导出的方法,后者仅提供空函数。因此,在运行时,您可以通过依赖于之前正确设置的某个全局变量(如
process.env.mode
)来插入正确的模块。在您的文件中,您只需导入上述模块并使用它,而不是直接使用assert
。这样,在您的代码周围您将永远不会看到像
myAssert && myAssert(cond)
这样容易出错的东西,相反,您将拥有一个更干净、更安全的myAssert(cond)
语句。下面是一个简单的例子:
b1zrtrql2#
**是的!**Assert在生产代码中是好的。
1.Assert允许开发人员记录代码所做的假设,使代码更易于阅读和维护。
1.Assert在生产中失败比允许Assert所保护的未定义行为更好。当Assert失败时,您可以更容易地发现问题并修复它。
1.知道代码在假设范围内工作远比获得一点性能增益更有价值。
我知道大家意见不一,但我的答案是肯定的,因为我有兴趣看看市民如何投票。
ffdz8vbo3#
大概没有
参考:When should assertions stay in production code?
在我的代码中,大多数情况下我把错误处理函数放在一个单独的文件中,并在任何地方使用相同的错误处理方法,这主要取决于逻辑
像ppl一般忘记这一点
和err == null不会造成伤害,它会检查null和undefined