Соглашение о том, где объявлять module.exports в файлах Javascript


11

Есть ли соглашение о том, где мы должны объявлять module.exportsфайлы модулей no Javascript / Node.js?

Должно ли это быть в начале файла, как:

module.exports = Foo;

function Foo() {
    this.bar = 'bar';
}

Foo.prototype.getBar = function() {
    return this.bar;
}

Или это должно быть в конце файла:

function Foo() {
    this.bar = 'bar';
}

Foo.prototype.getBar = function() {
    return this.bar;
}

module.exports = Foo;

Я знаю, что технической разницы нет. Первый пример совершенно корректен из-за объявления декларации .

Поэтому мне было интересно, есть ли какие-то лучшие практики.


Одним из преимуществ оставления его в конце является то, что вы можете использовать объекты функций ( var Foo = function()...), и еще один способ объявить это напрямую ( module.exports.Foo = function()...).
Марсело

Я мог бы var Foo = function Foo()...и это сработало бы.
Энрике Барселуш

Преимущество размещения наверху: вы можете сразу увидеть API вашего модуля (без необходимости прокручивать его вниз).
Адам Зернер,

Ответы:


4

Конечно, есть множество опций, которые обычно используются. Но это ужасно раздражает. Мне нравится ставить это в конце, потому что это работает при любых обстоятельствах. Всякий раз, когда я обнаруживаю, что занимаюсь чем-то необычным с module.exports, возможно, есть лучший способ сделать это.

Самое главное, как всегда, быть последовательным. И будьте последовательны в своей команде.

РЕДАКТИРОВАТЬ: С той же точки зрения, я хотел бы, чтобы все requireзаявления в начале. Мои файлы Node.js всегда выглядят так:

"use strict";

const fs = require("fs");
const MyClass = require("./MyClass");


class MyOtherClass extends MyClass {}

module.exports = MyOtherClass;

Ничего особенного, просто так, как вы ожидаете. Один класс на файл, один файл на класс. Файлы, названные в честь класса, который они содержат, с согласованным верхним / нижним регистром. Взгляните на этот модуль узла, вот несколько примеров: yaioc (заявление об отказе: я автор, а это бесстыдная реклама)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.