如何通过环境自定义Node.js中的公共js文件?

我试图根据环境自定义公共JavaScript文件。 具体来说,对于socket.io,我试图自定义客户端将连接到的位置:

发展:

var socket = io.connect('http://localhost/chat'); 

生产:

 var socket = io.connect('http://xxx.xxx.xxx.xxx/chat'); 

我知道所有关于应用程序本身的环境variables(我通过expression使用节点环境variables),但从我可以告诉这些variables将不会触及我服务于客户端的公共静态js文件。

基于开发/生产环境实现这种上下文切换的最佳方式是什么?

我接近它的方式是在布局页面中加载socket.io:

 <script src='<%= socketIoUrl %>/socket.io/socket.io.js'></script> <script type="text/javascript"> var socket = io.connect('<%= socketIoUrl %>'); </script> 

然后我添加了一个dynamic助手来公开socketIoUrl

 var helpers = function(app) { app.dynamicHelpers({ socketIoUrl: function(req, res) { return app.settings.socketIoUrl; } }); }; module.exports = helpers; 

所以在我的server.js文件中,我根据环境设置了相应的值,并加载了帮助程序文件:

 app.configure('development', function(){ app.set('socketIoUrl', 'http://localhost:3003'); }); app.configure('test', function(){ app.set('socketIoUrl', 'http://...'); }); app.configure('production', function(){ app.set('socketIoUrl', 'http://...'); }); require('./apps/helpers')(app); 

所以,现在你可以使用在你的布局页面中创build的任何其他js文件中的socketvariables。

如果您正在编写不引人注目的JavaScript并使用适当的捆绑系统,那么您提供的每个HTML页面应只引用一个“加载器”脚本,然后负责引入所有其他脚本。 创build该脚本的两个版本,一个用于开发,一个用于生产,并赋予它们不同的名称。 在渲染HTML时,将脚本的名称设置为您将根据环境设置的模板variables。 然后,您的加载脚本可以设置适当的variables,以供它所带入的脚本使用。