Konwencja, gdzie zadeklarować moduł.exports w plikach JavaScript

11

Czy istnieje jakaś konwencja, w której powinniśmy zadeklarować module.exportspliki modułów bez Javascript / Node.js?

Powinien być na początku pliku, na przykład:

module.exports = Foo;

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

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

A może powinien znajdować się na końcu pliku:

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

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

module.exports = Foo;

Wiem, że nie ma różnicy technicznej. Pierwszy przykład jest całkowicie poprawny z powodu podnoszenia deklaracji .

Zastanawiałem się więc, czy istnieją jakieś najlepsze praktyki.

Henrique Barcelos
źródło
Jedną z zalet pozostawiania go na końcu jest to, że można używać obiektów funkcji ( var Foo = function()...), a jeszcze innym sposobem deklarowania go jest bezpośrednio ( module.exports.Foo = function()...).
Marcelo
Mógłbym var Foo = function Foo()...i to też by działało.
Henrique Barcelos
Zaleta umieszczenia go na górze: możesz zobaczyć API swojego modułu na pierwszy rzut oka (bez konieczności przewijania w dół).
Adam Zerner,

Odpowiedzi:

4

Z pewnością istnieje wiele opcji, z których wszystkie są powszechnie używane. Ale to strasznie denerwujące. Lubię to na końcu, bo to działa w każdych okolicznościach. Za każdym razem, gdy robię coś wymyślnego z module.exports, prawdopodobnie istnieje lepszy sposób, aby to zrobić.

Co najważniejsze, jak zawsze, bądź konsekwentny. I bądź konsekwentny w swoim zespole.

EDYCJA: Z tego samego punktu widzenia lubię mieć wszystkie requirewypowiedzi na początku. Moje pliki Node.js zawsze wyglądają tak:

"use strict";

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


class MyOtherClass extends MyClass {}

module.exports = MyOtherClass;

Nic szczególnego, tak, jak byś się tego spodziewał. Jedna klasa na plik, jeden plik na klasę. Pliki nazwane na podstawie klasy, którą zawierają, o jednolitej górnej / dolnej części. Spójrz na ten moduł węzła, na kilka przykładów: yaioc (zrzeczenie się: jestem autorem, a to jest bezwstydna reklama)

Bruno Schäpper
źródło