我一直在尝试在 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
。不幸的是,没有运气。
谁能告诉我是什么原因导致了这个问题?
如果没有任何源代码,很难给出一个好的答案。不过,你可以尝试这样做。
cd
进入您的项目文件夹。npm i --save socket.io
const io = require('socket.io');
导入 socket.io。您是否将此代码放在渲染文档的底部(例如index.html)?
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io();
</script>
您可以在项目内部安装套接字 IO,而不是全局安装。
如果您使用 NodeJS 进行开发,则需要将包库添加到 package.json 中。这可以通过以下方式完成:
npm install --save socket.io
注意: 如果您的 npm install 无法安装 socket.io,请尝试:
npm install -g node-gyp
这会将这一行添加到您的 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');
我的问题出在 docker-compose 文件中,我在命令功能期间没有执行 npm 安装。
我通过在撰写文件中添加更改来修复它:
command: npm run dev
至:
command: bash -c "npm install && npm run dev"