在heroku上找不到模块“socket.io”

我已经研究过这个问题,但是我还没办法处理。

我的节点和socket.io简单的应用程序在我的本地计算机上运行良好,但不是在heroku上。

Socket.io包含在package.json中

我运行'heroku运行bash'并列出安装在heroku上的node_modules,而socket.io不在那里。 但在我的本地计算机socket.io似乎安装。

我'heroku摧毁myapp',然后再次创build它。 我几次运行以下脚本

git add . git commit -am "comment" git push heroku master 

如何让heroku安装socket.io模块? 我不确定这是否是真正的问题。

任何线索?

非常感谢你。

Heroku日志:

 app[web.1]: connect.limit() will be removed in connect 3.0 app[web.1]: connect.multipart() will be removed in connect 3.0 app[web.1]: visit https://github.com/senchalabs/connect/wiki/Connect-3.0 for alternatives app[web.1]: Express app started on port 21105 app[web.1]: app[web.1]: module.js:340 app[web.1]: throw err; app[web.1]: ^ app[web.1]: at Function.Module._load (module.js:280:25) app[web.1]: at require (module.js:380:17) app[web.1]: Error: Cannot find module 'socket.io' app[web.1]: at Object.<anonymous> (/app/server.js:46:37) app[web.1]: at Module._compile (module.js:456:26) app[web.1]: at Object.Module._extensions..js (module.js:474:10) app[web.1]: at Function.Module._resolveFilename (module.js:338:15) app[web.1]: at Module.require (module.js:364:17) app[web.1]: at module.exports (/app/config/games/anagrammix.js:11:11) app[web.1]: at Function.Module._load (module.js:312:12) app[web.1]: at Module.load (module.js:356:32) app[web.1]: error: Forever detected script exited with code: 8 heroku[run.1160]: State changed from up to complete heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch heroku[web.1]: Stopping process with SIGKILL heroku[web.1]: Process exited with status 137 heroku[web.1]: State changed from starting to crashed 

的package.json:

 { "name": "xxx", "description": "gaming", "version": "1.0.0", "private": false, "author": "xxx", "engines": { "node": "0.10.x", "npm": "1.2.x" }, "scripts": { "start": "NODE_ENV=development ./node_modules/.bin/nodemon server.js", "test": "NODE_ENV=test ./node_modules/.bin/mocha --reporter spec test/test-*.js" }, "dependencies": { "express": "latest", "jade": "latest", "mongoose": "latest", "connect-mongo": "latest", "connect-flash": "latest", "passport": "latest", "passport-local": "latest", "passport-facebook": "latest", "passport-twitter": "latest", "passport-github": "latest", "passport-google-oauth": "latest", "underscore": "latest", "gzippo": "latest", "async": "latest", "view-helpers": "latest", "forever": "latest", "socket.io":"latest" }, "devDependencies": { "supertest": "latest", "should": "latest", "mocha": "latest", "nodemon": "latest" } } 

server.js:

 /** * Module dependencies. */ var express = require('express') , fs = require('fs') , passport = require('passport'); /** * Main application entry file. * Please note that the order of loading is important. */ // Load configurations // if test env, load example file var env = process.env.NODE_ENV || 'test' , config = require('./config/config')[env] , auth = require('./config/middlewares/authorization') , mongoose = require('mongoose'); // Bootstrap db connection mongoose.connect(config.db); // Bootstrap models var models_path = __dirname + '/app/models' fs.readdirSync(models_path).forEach(function (file) { require(models_path+'/'+file); }); // bootstrap passport config require('./config/passport')(passport, config); var app = express(); // express settings require('./config/express')(app, config, passport); // Bootstrap routes require('./config/routes')(app, passport, auth); // Start the app by listening on <port> var port = process.env.PORT || 3000; var server = app.listen(port); console.log('Express app started on port '+port); //game settings require('./config/games/anagrammix')(server); // expose app exports = module.exports = app; 

anagrammix.js:

 /** * Module dependencies. */ var agx = require('../../app/games/anagrammix/agxgame'); module.exports = function (server) { // Create a Socket.IO server and attach it to the http server var io = require('socket.io').listen(server); // Reduce the logging output of Socket.IO io.set('log level',1); // Heroku won't actually allow us to use WebSockets // so we have to setup polling instead. // https://devcenter.heroku.com/articles/using-socket-io-with-node-js-on-heroku io.configure(function () { io.set("transports", ["xhr-polling"]); io.set("polling duration", 10); }); // Listen for Socket.IO Connections. Once connected, start the game logic. io.sockets.on('connection', function (socket) { //console.log('client connected'); agx.initGame(io, socket); }); } 

你有没有尝试在你的依赖关系中replacelatest*

https://npmjs.org/doc/json.html (请参阅“依赖关系”)

我find了适合我的解决scheme 。

它说从.gitignore文件中删除node_modules文件夹,以便您可以推送他们到heroku。

但这不是我正在寻找的东西。 以某种方式,heroku应该自动执行此安装,因为socket.io位于package.json中。 我不明白为什么它只能跳过socket.io。