2014-12-09 2 views
1

Я преобразовал старый JavaScript-код для использования в модуле node.js, и мне стало интересно, как это сделать.Лучшая практика для шаблонов модулей в node.js

Я видел несколько структур, использующих экспорт. module.exports и даже прототип, и это заставило меня задаться вопросом, какой метод считается лучшей практикой и почему?

Здесь приведен пример модуля сокращения из моего кода, написанного двумя способами.

Вариант 1:

var Helper = function() {}; 
Helper.latin_map = {"Á":"A","Ă":"A","Ắ":"A","Ặ":"A","Ằ":"A"}; 

Helper.prototype.urlise = function(orgString){ 
    var lower = orgString.toLowerCase(); 

    var latinised = lower.replace(/[^A-Za-z0-9\[\] ]/g, function(a) { 
     return Helper.latin_map[a] || a; 
    }); 

    return latinised.replace(/\s+/g, '-') 
} 

module.exports = new Helper(); 

Вариант 2:

var latin_map = {"Á":"A","Ă":"A","Ắ":"A","Ặ":"A","Ằ":"A"}; 

module.exports = { 
    urlise : function(orgString){ 
     var lower = orgString.toLowerCase(); 
     var latinised = lower.replace(/[^A-Za-z0-9\[\] ]/g, function(a) { 
      return latin_map[a] || a; 
     }); 

     return latinised.replace(/\s+/g, '-') 
    } 
} 

Это довольно простой пример, но я протяну это, чтобы обеспечить несколько доступных функций в одном модуле, поэтому, прежде чем я чтобы вещи стали слишком сложными. Я думал, что буду искать советы, какой подход считается лучшей практикой.

+0

Я бы сказал, что это более стандартный вариант для вас с вашим вариантом 2. Не цитируйте меня на этом, хотя я говорю это просто потому, что я никогда ничего не видел – Markasoftware

ответ

3

Я видел целый ряд структур с использованием exports, module.exports и даже прототип, и он оставил меня интересно, какой метод считается наилучшей практики и почему?

Вещи, которые имели .prototype были функции конструктора, и модуль экспортировали их как класс быть обработан.

Экспортировать обычные объекты (обычно как литералы) или даже расширять объект по умолчанию exports используется, когда вы хотите экспортировать объект «singleton» со статическими свойствами, так сказать, «пространство имен».

module.exports = new Helper() 

This is almost always wrong. Helper абсолютно не нужен и, как правило, даже нежелателен.

Вы должны выбрать вариант 2. Если вы действительно экспортировали только одну функцию, вы можете рассмотреть module.exports = function urlise(orgString){…}, но для экспорта нескольких функций, доступных в модуле, ваш вариант 2 является именно шаблоном для использования.

2

Вариант 2 лучше. Вам не нужны функции конструктора и экземпляры OO, если вы не планируете выполнять реальное программирование OO, где вы создаете множество экземпляров, и каждый из них имеет разные данные, связанные с ним. Этот код работает лучше как простая функция.

Смежные вопросы