我正在尝试使用谷歌闭包编译器优化命令行Javascript工具。
我有以下Javascript来源:
// main.js
console.log("test");
process.chdir("/");
console.log("arg: " + JSON.stringify(process.argv));
我的标记文件如下(closure.conf
):
--compilation_level=ADVANCED
--env CUSTOM
--language_in=ECMASCRIPT5_STRICT
--language_out=ECMASCRIPT5_STRICT
--warning_level=VERBOSE
--error_format=STANDARD
--strict_mode_input
--dependency_mode=NONE
--rewrite_polyfills=false
--module_resolution=NODE
--jscomp_off=checkVars
--package_json_entry_names es2015
--process_common_js_modules
我正在用命令编译它:
java -jar path/to/closure/compiler.jar --flagfile ./closure.conf --js main.js --js_output_file bundle.js
使用谷歌闭包编译器进行编译,我得到了这个(在bundle.js
中):
'use strict';process.b("/");JSON.stringify(process.a);
正如我所看到的,闭包编译器以某种方式将process
视为未定义的外部类,其方法可以轻松调整/优化。
但它很糟糕 - process
是node.js环境提供的外部资源,其属性可以自由重命名。此外,console
无法简单优化。
我认为应该存在某种方式,我们可以指示闭包编译器知道命令行节点环境,并按原样处理它的全局实体。
使用类似的外部库也应该这样做。我正在考虑使用Java中的“import”或C / C ++中的头文件。
我怎么能这样做?据我所知,closure有自己的API库,它们独立于命令行节点API。