Closure Compiler - JavaScript 库项目的最佳实践?
Posted
技术标签:
【中文标题】Closure Compiler - JavaScript 库项目的最佳实践?【英文标题】:Closure Compiler - best practice for JavaScript library projects? 【发布时间】:2020-10-25 08:13:36 【问题描述】:我正在尝试使用 Closure Compiler 来最小化和验证我的 javascript 库,但我正在努力解决一个问题。我创建了一个小项目来突出这个问题。这是我的库的带有公共 API 的 externs 文件。我是这样定义的:
https://developers.google.com/closure/compiler/docs/externs-and-exports
/**
* @fileoverview Public API of my-lib.js
*
* @externs
*/
const myLib = ;
myLib.foo = function() ;
这是实现:
// const myLib = ;
myLib.foo = function()
console.log("foo");
;
所以问题是,如果我取消注释第一行,我会收到此错误:
my-lib.js:1:6: ERROR - [JSC_REDECLARED_VARIABLE_ERROR] Illegal redeclared variable: myLib
1| const myLib = ;
^^^^^^^^^^
如果我不这样做,输出如下所示:
(function()myLib.foo=function()console.log("foo");)()
这很好,因为 myLib.foo
没有被重命名,所以外部变量正在工作,但同时 myLib
命名空间还没有创建。
解决此类问题的最佳做法是什么,或者如果没有,也许有一些解决方法?
我把这个例子推到了github:
https://github.com/morisil/closure-compiler-lib-example
【问题讨论】:
【参考方案1】:Externs 为编译器应该认为已经存在的符号提供定义。
有几个解决方案:
/** @suppress const,duplicate */
const myLib =
或在内部使用单独的名称并以编译器不会检查的方式分配它:
globalThis['myLib'] = myInternalName;
【讨论】:
以上是关于Closure Compiler - JavaScript 库项目的最佳实践?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Google Closure Compiler 编译的 jQuery
让 browserify 与 Google Closure Compiler 一起工作
Closure Compiler - JavaScript 库项目的最佳实践?
使用 Google Closure Compiler 时如何防止关键字被混淆?