当使用Google Closure编译器时,在浏览器和node.js之间共享JS的最佳方式
Best way to share JS between browser and node.js when using Google Closure compiler
我正在开发浏览器和运行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();
要验证编译输出中没有出现大量死代码,您可以这样操作:
相关文章:
- 在索引.html和应用.js [node.js] 之间共享变量
- 什么's本地node.js服务器和python简单http服务器之间的区别
- Node.js上的WebSocket,并在所有连接的客户端之间共享消息
- 如何用moment.js列出两个日期之间的所有月份
- 如何使用Node.js在JavaScript模块文件之间使用事件处理程序
- html5视频播放器和视频js之间的关系
- moment.js在两个时区格式的日期之间存在差异
- JS中单词之间的空格
- 我如何知道js文件之间的javascript应用程序代码流
- Node.js服务器和浏览器之间共享二进制缓冲区
- 通过node.js和socket.io在两个用户之间发送消息
- 铯JS-两点之间的距离
- Node.js HTTP/NET——连接和请求之间的区别
- 在使用JS的Ajax调用中,ajaxComplete和beforesend之间有什么区别
- Bacon.js:流和属性之间的实际差异
- Ember.js:接受的子组件和父组件之间通信的最佳实践
- JS get元素之间的差异's属性与elem.getAttribute(attr)和elem[attr]
- 在DIV Angular JS之间切换
- 不同进程之间共享Node.js环境
- 使用PKCS7Padding在python和Node.js之间进行AES加密