Javascript 如何根据环境定制Node.js中的公共js文件?
我正试图根据环境定制公共javascript文件。具体来说,对于socket.io,我正在尝试自定义客户端将连接到的位置: 发展:Javascript 如何根据环境定制Node.js中的公共js文件?,javascript,node.js,express,Javascript,Node.js,Express,我正试图根据环境定制公共javascript文件。具体来说,对于socket.io,我正在尝试自定义客户端将连接到的位置: 发展: var socket = io.connect('http://localhost/chat'); 制作: var socket = io.connect('http://xxx.xxx.xxx.xxx/chat'); 我知道应用程序本身中的所有环境变量(我通过express使用节点环境变量),但从我所知道的情况来看,这些变量不会影响我为客户端提供的公共静态js
var socket = io.connect('http://localhost/chat');
制作:
var socket = io.connect('http://xxx.xxx.xxx.xxx/chat');
我知道应用程序本身中的所有环境变量(我通过express使用节点环境变量),但从我所知道的情况来看,这些变量不会影响我为客户端提供的公共静态js文件
基于开发/生产环境实现这种上下文切换的最佳方式是什么?如果您编写的是不引人注目的JavaScript并使用适当的捆绑系统,那么您交付的每个HTML页面应该只引用一个“加载程序”脚本,然后负责引入所有其他脚本。创建该脚本的两个版本,一个用于开发,一个用于生产,并为它们指定不同的名称。呈现HTML时,将脚本的名称设置为模板变量,该变量将根据您的环境进行设置。然后,您的加载程序脚本可以设置适当的变量,以供它引入的脚本使用。就像我在布局页面中加载socket.io那样:
<script src='<%= socketIoUrl %>/socket.io/socket.io.js'></script>
<script type="text/javascript">
var socket = io.connect('<%= socketIoUrl %>');
</script>
因此,在我的server.js文件中,我根据环境设置了适当的值,并加载了helper文件:
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);
因此,现在您可以在任何其他js文件中使用布局页面中创建的
socket
变量。您是否尝试过:var socket=io.connect(document.location.href)
?@Aust-这是一个有趣的想法,但问题是文档的url与socket.io尝试连接的url不相同。因此,我可以在几个不同的页面中的一个页面上,但所有页面都应该连接到相同的socket.io位置。还有其他想法吗?
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);