Конвенція про те, де оголосити module.exports на файли Javascript


11

Чи існує якийсь конвенція про те, де нам слід оголосити module.exportsфайли модулів 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, можливо, є кращий спосіб зробити це.

Найголовніше, як завжди, бути послідовними. І будьте послідовними у своїй команді.

EDIT: З того самого поняття, мені подобається, щоб усі 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.