Подтвердить что ты не робот

Включение определения класса JavaScript из другого файла в Node.js

Я пишу простой сервер для 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 и "включить" его каким-то образом?

4b9b3361

Ответ 1

Вы можете просто сделать это:

user.js

class User {
    //...
}

module.exports = User

server.js

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

// Instantiate User:
let user = new User()

ОБНОВЛЕНИЕ 2019

Поскольку модули ES стали стандартом, некоторые авторы используют их в своих статьях, что может сбивать с толку, поскольку Node.js не позволяет использовать ESM. Тем временем Node.js имеет экспериментальную поддержку и требует наличия флага для работы ESM. Прочтите об этом в документации ESM Node.js.

Вот пример того же поведения для пояснения:

user.js

export default class User {}

server.js

import User from './user.js'

let user = new User()

Примечание

⚠️ Не используйте глобальные переменные, это создает потенциальные конфликты с будущим кодом.

Ответ 2

Используя ES6, вы можете иметь user.js:

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

И затем используйте его в server.js

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

Ответ 3

Измените определение класса следующим образом:

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

Затем переименуйте файл в user.js. Предполагая его в корневом каталоге вашего основного скрипта, вы можете включить его следующим образом:

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

Это быстрая и грязная версия. Прочтите о модулях CommonJS, если хотите узнать больше.

Ответ 4

В дополнение к тем, которые приведены здесь для 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);

Ответ 5

Если вы добавите это значение в 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');

Ответ 6

Вместо myFile.js напишите ваши файлы как myFile.mjs. Это расширение поставляется со всеми вкусностями ES6, но я имею в виду, я рекомендую вам веб-пакет и Babel