所以我使用以下命令安装了socket.io
:
npm install --save socket.io
我已正确设置我的服务器,现在我正在尝试设置我的客户端。为了让我的客户端使用socket.io
库,我需要导入socket.io
库。传统上,我会这样做:
<script src="/path/to/socket.io.js"></script>
除了我的所有socket.io
内容都位于我的服务器node_modules
上,而我的浏览器无法访问这些内容,而public
文件夹位于其根目录下。如何在我的客户端中加载socket.io
?
对于过去的其他事情,我决定只在public/js
文件夹中复制粘贴,但每次我使用npm
安装前端内容时我都不愿意这样做。我已经在线阅读了Bower
和Browserify
之类的内容,但混淆的是我决定来这里寻求直接的答案。
答案 0 :(得分:3)
你也可以从CDN加载,虽然这很难解决你在客户端使用npm模块的一般问题
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.4.5/socket.io.js"></script>
Bower
是来自npm
的独立包管理器,它所做的只是将模块安装到特定文件夹中,并且倾斜于它所服务的模块应该准备好使用脚本标记包含在客户端上,虽然对此没有任何限制,它没有使用npm
提供任何功能和优势,但您仍然必须在某个目录中包含脚本,如果它被称为vendor
或者它是什么重要的node_modules
?
使用npm
获得的优势是更大的模块集,并且更大的模块集提供了更多的质量模块。但是,npm
上的模块应该遵循节点的模块系统,这基本上是常见的.JS,对此没有限制,npm
可以并将托管任何有效package.json
的模块。 1}}文件。
像Browserify
这样的工具将该模块系统转换为可在浏览器中工作的格式,即他们所做的一切。
如果您不愿意为前端使用构建系统,那么您必须求助于从node_modules加载,快速符号链接到public
文件夹就足够了(尽管您可能希望更聪明一点)。但是,您必须执行额外步骤以确保您要使用的模块已准备好用于浏览器,npm
中的许多模块都定位于node
,因此它们无需在浏览器。许多模块将包含浏览器构建或某种UMD,因此它们可以在任何地方使用。
答案 1 :(得分:2)
Socket.IO为公共部分添加了自己的路由,您应该像以下一样使用它:
<script src="/socket.io/socket.io.js"></script>
它应该像魅力一样:)