为什么我总是收到“找不到模块‘socket.io’”?

问题描述 投票:0回答:4

我一直在尝试在 NodeJS 脚本中使用 socket.io,但我不断收到错误“找不到模块 'socket.io'”。

完整错误:

$ sudo node /var/www/apache/server/serverScript.js
module.js:549
    throw err;
    ^

Error: Cannot find module 'socket.io'
    at Function.Module._resolveFilename (module.js:547:15)
    at Function.Module._load (module.js:474:25)
    at Module.require (module.js:596:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/var/www/apache/server/serverScript.js:59:12)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)

我已经尝试在全球范围内安装socket.io,我已经更新了所有与npm相关的内容,并尝试了我在网上找到的所有其他常见建议,但错误没有改变。

如果我不得不猜测,我认为这与 package.json 文件有关。我最近才开始使用 NodeJS,从未使用过 package.json 文件。我看到有人提到它是一个修复,所以我通过

npm init
添加了一个。这将其置于
/home/pi
中。由于这没有帮助,我将文件移动到js文件位置:
/var/www/apache/server
。不幸的是,没有运气。

谁能告诉我是什么原因导致了这个问题?

javascript node.js socket.io
4个回答
7
投票

如果没有任何源代码,很难给出一个好的答案。不过,你可以尝试这样做。

  1. 打开您的cmd或终端。
  2. cd
    进入您的项目文件夹。
  3. 运行命令:
    npm i --save socket.io
  4. 在源代码中,输入
    const io = require('socket.io');
    导入 socket.io。

0
投票

您是否将此代码放在渲染文档的底部(例如index.html)?

<script src="/socket.io/socket.io.js"></script>
<script>
  var socket = io();
</script>

您可以在项目内部安装套接字 IO,而不是全局安装。


0
投票

如果您使用 NodeJS 进行开发,则需要将包库添加到 package.json 中。这可以通过以下方式完成:

npm install --save socket.io

注意: 如果您的 npm install 无法安装 socket.io,请尝试:

  • 全局安装node-gyp:
    npm install -g node-gyp
  • 创建一个 .npmrc 文件,内容如下:@types:registry=https://registry.npmjs.org/

这会将这一行添加到您的 package.json 中:

"dependencies": {
    "debug": "~3.1.0",
    ...    
    "socket.io-adapter": "~1.1.0",
    "socket.io-client": "2.1.1",
    "socket.io-parser": "~3.2.0"
},

注意: 点是可能存在于其中的其他包库。

然后,您可以在代码中使用它:

const io = require('socket.io');

0
投票

我的问题出在 docker-compose 文件中,我在命令功能期间没有执行 npm 安装。

我通过在撰写文件中添加更改来修复它:

command: npm run dev

至:

command: bash -c "npm install && npm run dev"

© www.soinside.com 2019 - 2024. All rights reserved.