【发布时间】:2012-01-21 15:44:41
【问题描述】:
据我所知,如果 node.js 不用作 Web 服务器,我们将在何处定位 socket.io 的客户端脚本没有任何解释。我找到了客户端文件的整个目录,但我需要它们的组合版本(就像使用 node.js 网络服务器时提供的那样)。有什么想法吗?
【问题讨论】:
据我所知,如果 node.js 不用作 Web 服务器,我们将在何处定位 socket.io 的客户端脚本没有任何解释。我找到了客户端文件的整个目录,但我需要它们的组合版本(就像使用 node.js 网络服务器时提供的那样)。有什么想法吗?
【问题讨论】:
我发现最好的方法是使用bower。
bower install socket.io-client --save
并在应用的 HTML 中包含以下内容:
<script src="/bower_components/socket.io-client/socket.io.js"></script>
这样您就可以像对待任何其他托管软件包一样对待客户端的 socket.io 部分。
【讨论】:
bower_components/socket.io-client/dist/socket.io.min.js
bower info socket.io-client,它看起来像是在没有 bower.json 的情况下注册到 bower(因此在 bower repo 中创建了一个默认值)。你可以 fork 项目,创建一个 bower.json,然后注册你自己的 bower 版本。创建一个包含 bower.json 的拉取请求。创建一个问题,看看贡献者是否可以创建它。
socket.io.js 是您要放入客户端 html 的内容。比如:
<script type="text/javascript" src="socket.io.js"></script>
我的脚本位于:
/usr/local/lib/node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js
将该文件复制到您希望服务器为其提供服务的位置。
【讨论】:
我认为更好和正确的方法是从这个 url 加载它
src="/socket.io/socket.io.js"
在 socket.io 运行的域上。这个解决方案的积极之处在于,如果您更新您的 socket.io npm 模块,您的客户端文件也会更新,您不必每次都手动复制它。
【讨论】:
我按照 Matt Way 的回答中的建议使用了 bower,效果很好,但是库本身没有自己的 bower.json 文件。
这意味着我用来查找依赖项的 JS 文件的 bower-main-files Gulp 插件没有拉入 socket.io,我在页面加载时遇到错误。向我的项目的 bower.json 添加覆盖解决了这个问题。
首先用 bower 安装库:
bower install socket.io-client --save
然后将覆盖添加到项目的 bower.json:
"overrides": {
"socket.io-client": {
"main": ["socket.io.js"]
}
}
【讨论】:
对于所有运行wiredep 并获得“socket.io-client 未注入您的文件”的人。错误:
像这样修改你的wiredep任务:
wiredep: {
..
main: {
..
overrides: {
'socket.io-client': {
main: 'socket.io.js'
}
}
}
【讨论】:
socket.io-client 默认情况下不会发生什么?
如果您使用的是 bower.json,请添加 socket.io-client 依赖项。
"socket.io-client": "0.9.x"
然后运行bower install下载socket.io-client。
然后在你的 HTML 中添加脚本标签。
<script src="bower_components/socket.io-client/dist/socket.io.min.js"></script>
【讨论】:
我创建了一个兼容凉亭的 socket.io-client,可以像这样安装:
bower install sio-client --save
或用于开发用途:
bower install sio-client --save-dev
链接到repo
【讨论】:
如果你使用https://github.com/btford/angular-socket-io 确保你的 index.html 是这样的:
<!-- https://raw.githubusercontent.com/socketio/socket.io-client/master/socket.io.js -->
<script src="socket.io.js"></script>
<!-- build:js({client,node_modules}) app/vendor.js -->
<!-- bower:js -->
<script src="bower_components/jquery/dist/jquery.js"></script>
<script src="bower_components/angular/angular.js"></script>
<!-- ...... -->
<script src="bower_components/angular-socket-io/socket.js"></script>
<!-- endbower -->
<!-- endbuild -->
<script type="text/javascript" charset="utf-8">
angular.module('myapp', [
// ...
'btford.socket-io'
]);
// do your angular/socket stuff
</script>
【讨论】: