【问题标题】:How does script tag resolves path to node_modules?脚本标签如何解析 node_modules 的路径?
【发布时间】:2016-05-15 03:08:55
【问题描述】:

我正在阅读这个 Node.js In Action 并且有这个 index.html 引用来自 node_modules 文件夹的 socket.io.js(我相信)。

node_modules 文件夹是index.html 所在目录的上一级目录时,以下脚本标记如何解析socket.io.js 的路径?

脚本标签:

<script src="/socket.io/socket.io.js" type="text/javascript"></script>

【问题讨论】:

  • Can't find socket.io.js的可能重复
  • 感谢 JordanHendrix,但在我的情况下,没有错误说文件找不到。从我的角度来看,一切正常,但我想了解当脚本标签中未明确指定时,脚本标签如何设法在 node_modules/socket.io 目录中找到 socket.io.js。提前非常感谢!

标签: javascript node.js


【解决方案1】:

当您在文件中包含模块时,节点首先在当前目录的node_modules 文件夹中查找该模块。如果它在那里没有找到它,那么它会移动到父目录并在该目录中的node_modules 中查找模块,它会继续向上移动,直到找到所需的模块。

【讨论】:

    【解决方案2】:
    • Socket.io 将socket.io-client/socket.io.js 文件的内容读入一个变量中。

    • Socket.io 可以访问您的应用程序的 http 服务器,然后它会侦听与“/socket.io/socket.io.js”之类的 URL 匹配的请求,并使用该变量的内容进行响应以上

    你可以在socket.io source code看到这个:

    【讨论】:

    • 谢谢 Saeed,你是说 '/socket.io/socket.io.js' 与 socket.io.js 实际所在的实际目录匹配(即 node_modules/socket.io /lib/socket.io.js)?非常感谢!
    • @Samot,没有物理文件路径和URL不需要匹配。物理文件来自另一个名为 socket.io-client 的 npm 包,socket.io 包依赖于该包。所以文件位于node_modules/socket.io-client/socket.io.js
    • 好的,谢谢赛义德。那么说'/socket.io/socket.io.js'指的是'node_modules/socket.io/lib/socket.io.js'是否安全和正确?提前致谢
    • “所以文件位于 node_modules/socket.io-client/socket.io.js 下” - 我找不到这个目录......它在我的项目目录下吗?谢谢!
    • 这并不完全安全。虽然它目前是从这个位置提供的,但将来 socket.io 可能会将它移动到不同的位置,但仍然从同一个 URL 提供它。如果您让我知道您想要达到的目标,我可能会为您提供更好的帮助。
    猜你喜欢
    • 2019-12-08
    • 2019-02-10
    • 2014-08-15
    • 2016-05-06
    • 2018-05-18
    • 1970-01-01
    • 1970-01-01
    • 2015-06-28
    相关资源
    最近更新 更多