在 Node.js 中包含来自另一个文件的 JavaScript 类定义

我正在为 Node.js 编写一个简单的服务器,我使用我自己的类 User,它看起来像:

function User(socket) {
this.socket = socket;
this.nickname = null;


/* ... just the typical source code like functions, variables and bugs ... */


this.write = function(object) {
this.socket.write(JSON.stringify(object));
}
};

然后在这个过程中,我将它实例化了很多次:

var server = net.createServer(function (socket) {
/* other bugs */
var user = new User(socket);
/* more bugs and bad practise */
});

我可以移动我的 User类定义到另一个 javascript 文件和“包含”它以某种方式?

193098 次浏览

修改你的类定义如下:

exports.User = function (socket) {
...
};

然后将文件重命名为 user.js。假设它在主脚本的根目录中,您可以这样包含它:

var user = require('./user');
var someUser = new user.User();

如果你想了解更多,请阅读 CommonJS 模块

如果你把这个附加到 user.js:

exports.User = User;

然后在 server.js中你可以做:

var userFile = require('./user.js');
var User = userFile.User;

Http://nodejs.org/docs/v0.4.10/api/globals.html#require

另一种方式是:

global.User = User;

那么在 server.js中这就足够了:

require('./user.js');

你可以这样做:

User.js

class User {
//...
}


module.exports = User // 👈 Export class

Server.js

const User = require('./user.js')


let user = new User()

这就是所谓的 CommonJS模块。

电子系统模块

自 Node.js 版本14以来,可以使用具有 CommonJS 的 ES 模块。

Mjs (扩展很重要)

export default class User {}

服务器 MJ

import User from './user.mjs'


let user = new User()

使用 ES6,你可以得到 user.js:

export default class User {
constructor() {
...
}
}

然后在 server.js中使用它

const User = require('./user.js').default;
const user = new User();

这里提供的 ES6方法之外的另一种方法

module.exports = class TEST{
constructor(size) {
this.map = new MAp();
this.size = size;


}


get(key) {
return this.map.get(key);
}


length() {
return this.map.size;
}


}

包括与

var TEST= require('./TEST');
var test = new TEST(1);