ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

javascript – Google Closure Compiler – 基于externs的死代码删除

2019-05-30 20:24:10  阅读:167  来源: 互联网

标签:javascript google-closure-compiler google-closure google-closure-library


我正在尝试使用Google Closure Compiler根据将要运行的位置(在服务器上与客户端)通过单个变量来分割我的应用程序代码.在这个例子中,将要在服务器上调用的所有内容都在isServerSide var之后,但是,正在为客户端编译代码.所以我将isServerSide设置为false并让编译器删除客户端不会运行的所有内容……

在app.js里面:

goog.provide('my.app');
my.app.log = function(message) {
  document.write(message);
}
my.app.initClientSide = function() {
  my.app.log('hello client');
}

my.app.initServerSide = function() {
  my.app.log('hello server');
}

if (isServerSide) {
  my.app.log('initing server');
  my.app.initServerSide()
}else my.app.initClientSide();

在externs.js里面:

/**
 * @define {boolean} is server side?
 */
var isServerSide=false;

命令:

java -jar bin/compiler.jar --js closure-library/closure/goog/base.js --js app.js --externs externs.js --manage_closure_dependencies true --process_closure_primitives true --summary_detail_level 3 --warning_level VERBOSE --compilation_level=ADVANCED_OPTIMIZATIONS --closure_entry_point my.app

预期产量:

document.write("hello client");

实际产量:

isServerSide?(document.write("initing server"),document.write("hello server")):document.write("hello client");

如果我手动输入isServerSide = false;在app.js然后我可以得到它编译到这:

isServerSide=false;document.write("hello client");

这让我觉得我设置了我的externs.js错了(或者我只是不明白实际上应该使用什么externs).

有关如何使这项工作的任何建议?

解决方法:

您可以通过直接在编译器调用中设置@define值来指定它们.
Externs服务于不同的目的,如hyperslug正确陈述.

通过将@define定义(从你的extern)放入app.js然后像这样调用编译器来实现预期的结果:

java -jar compiler.jar \
--define "isServerSide=false" \
--js closure-library/closure/goog/base.js \
--js app.js \
--manage_closure_dependencies true \
--process_closure_primitives true \
--summary_detail_level 3 \
--warning_level VERBOSE \
--compilation_level=ADVANCED_OPTIMIZATIONS \
--closure_entry_point my.app

标签:javascript,google-closure-compiler,google-closure,google-closure-library
来源: https://codeday.me/bug/20190530/1185624.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有