0

我使用 babelify + watchify + envify + uglify 并设置 node_env watchify ... -g [envify --NODE_ENV development]

所以我想到了这样的断言:

import assert from 'assert';

function debug_assert(actual, expected, message = 'AssertionError'){
    if(process.env.NODE_ENV !== 'production'){
        assert.equal(actual, expected, message);
    }
}

uglify 足够聪明,可以删除 debug_assert 的主体,但不会删除代码中对 debug_assert 的实际调用。

如果没有太多额外的代码,是否可以从发布版本中正确删除断言调用?

4

2 回答 2

0

您可以使用jsfmt及其代码重写功能:

jsfmt --rewrite "assert.equal(a, b, c) -> ''" file.js

尚未测试,但它可能会完成它的工作。assert.equal它用空字符串替换所有出现的。

于 2015-07-08T21:59:15.443 回答
0

通常你会使用工具的组合。正如你所说,envify将转换

if(process.env.NODE_ENV !== 'production'){

if('production' !== 'production'){

意思是if永远不会执行的主体。

之后您可以做的最简单的事情是使用,uglifyify因为它将执行死代码消除并删除if.

于 2015-07-08T22:36:10.813 回答