当前位置: 首页 > 面试题库 >

uglify-js可以删除console.log语句吗?

楚意
2023-03-14
问题内容

我正在使用uglify-
js
来缩小源代码。我想删除原始源代码的console.log语句。可能吗?还是有其他压缩工具支持此功能?

我在Node.js中使用以下代码。

var uglify = require('uglify-js');
var originalSourceCode = 'var name = function(){var str = "test"; return str}; console.log("log data");';
var minifiedCode = uglify.minify(originalSourceCode, {
                fromString : true,
                mangle: {},
                warnings: true
            });
console.log(minifiedCode);

输出为:

$node m.js
{ code: 'var name=function(){var a="test";return a};console.log("log data");',
  map: 'null' }

在缩小的代码中,不会删除console.log。


问题答案:

在最新的uglify-
js(v2.4.3)中,添加了新的压缩选项’pure_funcs’。如果将console.log函数添加到此数组,它将在缩小的js文件中删除。下面的测试代码显示了此选项的工作方式。这正是我想要的。

// file: m.js
var uglify = require('uglify-js');
var originalSourceCode = 'var name = function(){var str = "test"; return str}; console.log("log data" + name());';
var minifiedCode = uglify.minify(originalSourceCode, {
                fromString : true,
                mangle: {},
                warnings: true,
                compress:{
                    pure_funcs: [ 'console.log' ]
                }
            });
console.log(minifiedCode);

$node m.js
WARN: Dropping side-effect-free statement [?:1,53]
{ code: 'var name=function(){var n="test";return n};',
  map: 'null' }

来自https://github.com/mishoo/UglifyJS2的报价

pure_funcs-默认为null
您可以传递一个名称数组,UglifyJS会假定这些函数不会产生副作用。危险:将不检查名称是否在范围内重新定义。这里有一个示例案例,例如var q =
Math.floor(a / b)。如果没有在其他地方使用变量q,UglifyJS将删除它,但仍保留M​​ath.floor(a /
b),而不知道它做什么。您可以传递pure_funcs:[‘Math.floor’]使其知道该函数不会产生任何副作用,在这种情况下,整个语句将被丢弃。当前的实现增加了一些开销(压缩会更慢)。



 类似资料:
  • 问题内容: 我正在尝试从表中删除行,但出现错误。 我在50时收到此错误: 您的SQL语法有误;检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在第1行的“ 50”附近使用 不知道怎么了 问题答案: 您不能在的子句中指定偏移量。 因此,唯一的方法是将查询重写为以下形式: 假设您有主键列 UPD :您需要实现双重嵌套来欺骗mysql,因为它不允许从当前修改的表中进行选择(感谢Martin

  • 从for, foreach, if..elseif...else, try...catch...finally, while...do, do...while中快速提取或删除代码 提取或删除代码的时候,被绿色选中的是要提取的内容,被红色选中的是要被删除的内容. 操作步骤: 菜单栏: Code —> Unwrap\/Remove 快捷键: Mac: command + shift + Delete

  • 是否可以重写以下内容,使其不包含任何条件语句?我想使用按位运算之类的东西可能会有一些聪明的技巧? 编辑:澄清一下,我不是在寻找一种去除条件句的通用方法。我正在寻找一个技巧,从这个非常具体的代码中删除条件。把它当成一个学术难题。 举个例子,删除条件(在某些情况下会产生性能增益)的一种方法是预先计算一个查找表,然后用< code>b索引。在这种特殊情况下,这很棘手,因为< code>b可能是一个非常大

  • 问题内容: 我列出了需要从SQL Server中删除的表(大约100 ++)。以下是我将使用的示例代码 我需要将表名100 ++时间替换为其他表名。如何编写可以自动生成查询列表的动态sql脚本? 问题答案: 您可以先生成脚本,然后使用动态sql执行: 如果您使用的版本低于2012,则需要使用字符串串联进行更改。 您可以通过修改模板轻松地使用自定义架构扩展此脚本: 输出:

  • 问题内容: 我遇到的问题是,删除的数据稍后仍会出现在同一查询中。自然,在完全独立的查询中,不会显示已删除的数据。 这不是我的用例,但是我认为这是显示问题的最简单方法: 我把它放在这里了。 在整个查询完成之前,似乎没有提交正义,这感觉很奇怪,因为优先级要求发生在之前。 有什么方法可以在单个查询中实现此目标吗? 编辑 答案已经回答了直接的问题。根本的问题是,如果没有更多与该公司关联的员工,则删除该员工