gpt4 book ai didi

javascript - 闭包编译器删除的内容超出了我想要删除的内容

转载 作者:行者123 更新时间:2023-12-02 18:20:38 25 4
gpt4 key购买 nike

我关注了the advice from this other SO thread从我的代码中删除 console.log() 语句。

不幸的是,现在闭包编译器正在删除我的整个代码,而不仅仅是 console.log() 语句。

有人可以解释一下吗?我迷茫了...

JS文件1

(function(){
/** @const */
LOG = false;

function log() {
return console.log.apply(console, arguments);
}

LOG && log('hello world !');

var foo='bar';
LOG && log("foo"+foo);
})();

JS文件2

(function(){
/** @const */
LOG = false;

function test(){
alert('testing...');
}

var baz='bazzy';
LOG && log("baz"+baz);


})();

关闭编译器步骤:

$ java -jar compiler-latest/compiler.jar --js j1.js j2.js --js_output_file compiled.js 

结果:

(function(){LOG=!1})();(function(){LOG=!1})();

最佳答案

因为编译器确定您的代码的其余部分无法访问。

这两个文件的常量 LOG 设置为 false,并且您没有导出任何内容(goog.export* 或 window['...'] = ...)。可以执行的代码前面有LOG &&,表示没有执行。

因此没有任何东西可以被执行,因此编译器将其全部删除。

为什么功能测试被删除:没有人调用它,就这么简单。在您的一个文件中调用它,编译器不会将其删除。

<小时/>

您可以(实际上应该)定义 LOG 并仅在一个文件中记录。为此,请删除每个文件中代码周围的匿名函数调用。您可以使用命令行选项告诉编译器将其添加回已编译的代码中:

--output_wrapper=(function(){ %output% })();

所以你的两个文件应该如下所示:

JS文件1

/** @const */
var LOG = false;

function log() {
return console.log.apply(console, arguments);
}

LOG && log('hello world !');

var foo='bar';
LOG && log("foo"+foo);

JS文件2

function test(){
alert('testing...');
}

var baz='bazzy';
LOG && log("baz"+baz);

// call test, so it a) isnt stripped and b) well, executed :)
test();

此外,您可能希望将全局变量和函数放入“命名空间”中,以免污染全局范围:

// create namespace (which is just a normal object)
var MyNamespace = {};

// create a namespaced function
MyNamespace.test = function() {
alert('test');
}

// call it
MyNamespace.test();

关于javascript - 闭包编译器删除的内容超出了我想要删除的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18860256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com