Javascript 条件包含预缩小 : does such a tool exist?

标签 javascript conditional-compilation minify

我能找到的所有 JS 压缩器都是通过空格消除、变量重命名和常规压缩的组合工作的。但是,如果压缩器知道正在压缩的项目需要模块中的哪些功能,则可以减少更多内容。

假设一个项目使用 underscore.js , 但仅使用导出函数 _.isEmpty_.isArray。看着the source ,压缩器可以只包含 _.isEmpty_.isArray_.isString_.hasOwnProperty .

这样做可能需要标记模块源以说明什么是什么并表达模块内依赖性,例如:

//{{ "_.isEmpty" depends "_.isArray", "_.isString", "_.hasOwnProperty"
_.isEmpty = function(obj) {
  if (_.isArray(obj) || _.isString(obj)) return obj.length === 0;
  for (var key in obj) if (hasOwnProperty.call(obj, key)) return false;
  return true;
};
//}}

然后可以运行 minify underscore.js ["_.isEmpty", "_.isArray"] 来删除不需要的所有内容。或者,您可以在代码中包含相同的标签来表达 underscore.js 的那些必需部分,然后将您的代码与下划线捆绑在一起并有条件地编译结果。在这两种情况下,您都可以在最后运行标准缩小器。

正如所描述的,这甚至不是特定于 JS 的,所以某些东西必须存在于某处。一个更聪明的条件包含器或许可以分析代码以检测依赖关系,但这是一个难题。


我正在寻找一个 JS“缩小器”,它可以在依赖项注释的帮助下削减死代码。有这种东西吗?

最佳答案

谷歌的 Closure Compiler的“高级编译”功能做你想做的事——它解析你的 JavaScript 源代码并自动删除它的死代码 (try it online)。缺点是你may have to make changes to your code不过,让它起作用。

关于Javascript 条件包含预缩小 : does such a tool exist?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6276445/

相关文章:

php - fpassthru() 替代方案

javascript - 如何在 ASP.NET webforms 项目中缩小和/或合并 *.axd JavaScript 文件?

javascript - 如何在正确的工厂 AngularJS 上编写

javascript - 如何跟踪使用特定输入元素的事件

javascript - Angular 4 验证码不工作

javascript - 如何获取输入数字类型的值?

c++ - 虚拟调试类卡在 std::endl 重载上

c - 从 .h 头文件中删除预编译指令

rust - Rust build.rs 脚本的条件编译?

iis-7 - Nginx 反向代理 SSL/缩小