节点:所需文件的名称冲突

谢谢阅读!!

这个问题

我如何避免名称冲突? 这是我的问题吗? 这是正确的吗?

细节

我是新来node&javascript和写一个应用程序(23)的tcp到不同types的networking设备。

我决定为每个设备创build一个单独的js文件,并且在我的app.js文件中require它们。

当我启动的应用程序, apple1连接,但只要banana1连接,我失去了与apple1连接。 我没有收到apple1的断开信息。

我怀疑是因为当我改变连接最后一个苹果的顺序时有某种variables名称冲突,那么香蕉就是我失去连接的那个。 为了支持我的怀疑,在我的banana.js ,我指定了self = this; ,我把它改成了somethingElse = this 。 通过这样做,我可以同时连接到两个设备。

app.js

 var deviceA = require('./apple.js'); var apple1 = new deviceA({ ipAddress: "192.168.1.97", port: 23 }) apple1.connect(); apple1.on('connect', function(data) { console.log('Apple: Device Connected @' + apple1.ipAddress); }) apple1.on('disconnect', function(data) { console.log('Apple: Device Disconnected'); }) var deviceA = require('./banana.js'); var banana1 = new deviceA({ ipAddress: "192.168.1.97", port: 23 }) banana1.connect(); banana1.on('connect', function(data) { console.log('Banana: Device Connected @' + banana1.ipAddress); }) banana1.on('disconnect', function(data) { console.log('Banana: Device Disconnected'); }) 

apple.js

 var events = require('events'); var Apple = function(opts) { this.ipAddress = opts.ipAddress; this.port = opts.port; }; Apple.prototype = new events.EventEmitter; module.exports = Apple; Apple.prototype.connect = function() { self = this; // telnet to apple var net = require('net'); self.connection = net.createConnection(self.port, self.ipAddress); self.connection.setEncoding("UTF8"); self.connection.on('connect', function(data) { self.emit('connect'); }); self.connection.on('disconncect', function(data) { self.emit('disconnect'); }); } 

banana.js

 var events = require('events'); var Banana = function(opts) { this.ipAddress = opts.ipAddress; this.port = opts.port; }; Banana.prototype = new events.EventEmitter; module.exports = Banana; Banana.prototype.connect = function() { self = this; // telnet to banana var net = require('net'); self.connection = net.createConnection(self.port, self.ipAddress); self.connection.setEncoding("UTF8"); self.connection.on('connect', function(data) { self.emit('connect'); }); self.connection.on('disconncect', function(data) { self.emit('disconnect'); }); } 

我如何避免名称冲突?

不要使用(隐式)全局variables。

这是我的问题吗?

是。 你造成了,你需要修复它。

这是正确的吗?

是!

如何解决它?

不要重命名碰撞variables,而是使用var将其声明为local 。

如何防止这一点?

对所有文件使用严格模式 ,并且在分配未声明的全局variables时会发生exception。