Quy ước về nơi khai báo module.exports trên tệp Javascript


11

Có bất kỳ quy ước nào về nơi chúng ta nên khai báo module.exportskhông có tệp mô-đun Javascript / Node.js không?

Nó nên ở đầu tập tin như:

module.exports = Foo;

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

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

Hoặc nó nên ở cuối tập tin:

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

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

module.exports = Foo;

Tôi biết rằng không có sự khác biệt kỹ thuật. Ví dụ đầu tiên là hoàn toàn hợp lệ vì khai báo .

Vì vậy, tôi đã tự hỏi nếu có một số loại thực hành tốt nhất.


Một lợi thế của việc để nó ở cuối là bạn có thể sử dụng các đối tượng hàm ( var Foo = function()...) và một cách khác để khai báo nó là trực tiếp ( module.exports.Foo = function()...).
Marcelo

Tôi chỉ có thể var Foo = function Foo()...và nó sẽ làm việc như là tốt.
Henrique Barcelos

Lợi thế của việc đặt nó lên hàng đầu: bạn có thể thấy API của mô-đun trong nháy mắt (mà không cần phải cuộn xuống).
Adam Zerner

Câu trả lời:


4

Chắc chắn có rất nhiều và rất nhiều lựa chọn, tất cả đều được sử dụng phổ biến. Nhưng điều đó thật khó chịu. Tôi thích đặt nó ở cuối, bởi vì nó hoạt động trong mọi hoàn cảnh. Bất cứ khi nào tôi thấy mình làm điều gì đó lạ mắt với module.exports, có lẽ có một cách tốt hơn để làm điều đó.

Quan trọng nhất, như mọi khi, phải nhất quán. Và hãy kiên định trong nhóm của bạn.

EDIT: Trên cùng một khái niệm, tôi muốn có tất cả các requiretuyên bố ngay từ đầu. Các tệp Node.js của tôi luôn trông như thế này:

"use strict";

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


class MyOtherClass extends MyClass {}

module.exports = MyOtherClass;

Không có gì lạ mắt, chỉ là cách bạn mong đợi nó. Một lớp cho mỗi tệp, một tệp cho mỗi lớp. Các tệp được đặt tên theo lớp mà chúng chứa, bao gồm cả trên / dưới. Hãy xem mô-đun nút này, để biết một số ví dụ: yaioc (từ chối trách nhiệm: Tôi là tác giả và đây là quảng cáo không biết xấu hổ)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.