当使用Google Closure编译器时,在浏览器和node.js之间共享JS的最佳方式

Best way to share JS between browser and node.js when using Google Closure compiler

本文关键字:之间 js node 共享 JS 方式 最佳 浏览器 Google Closure 编译器      更新时间:2023-09-26

我正在开发浏览器和运行node.js的服务器之间的网络应用程序。我现在分享了很多代码,但当我实际部署它时,我希望客户端只获得客户端特定的代码。我现在的选择是:

1)。使用继承实现任何浏览器/node.js差异。我在几个地方尝试过这个,我最终得到了很多类,它们是非常非常基本的自定义,它们的父类通常只是部分专门化一个函数。我不太喜欢这种风格,因为当你试图找出实际发生的事情时,它意味着很多间接的东西。

2)。在全局范围内定义一个像IS_BROWSER这样的常量,然后在我需要更改浏览器与node.js上的代码路径时检查它。然后用高级优化关闭编译所有js,以删除浏览器上的死代码(设置IS_BROWSER = true)。假设我做了任何我需要做的事情来获得闭包编译器的高级优化,这种方法是否有任何问题?

3。)? ?我愿意听取建议。

如果使用高级编译,则应删除任何未使用的代码;如果您正确使用编译器的导出系统,任何客户端代码未调用的服务器端代码都不会出现在客户端代码的编译版本中。

你可以把所有的代码写在一个大blob中,然后为你的客户端添加一个文件,内容如下

goog.require('my.client.app');
goog.exportSymbol('my.app.entryPoint', my.client.app.entryPoint);

编译后的代码将不包含任何不在my.client.app.entryPoint调用树中的内容。同样,如果您的编译只导出服务器入口点,则客户端代码将被排除在外。

上面的样式是为编写脚本提供一些函数,然后由内联脚本调用;要想把整个东西变成一个脚本,你可以做一些更简单的事情:

goog.require('my.client.app');
my.client.app.entryPoint();

要验证编译输出中没有出现大量死代码,您可以这样操作: