2015-03-21 10 views
6

Jak mogę zawierać wszystkie pliki w nodeJS jakJak mogę wymagać modułów ze wzorami na ścieżce?

require('./packages/city/model/cities') 
require('./packages/state/model/states') 
require('./packages/country/model/countries') 

podobnego jak

require('./packages/*/model/*') 

samo jak grunt jest ładowanie plików.

Odpowiedz

4

Nie można (a przynajmniej nie powinien)

Aby to zrobić, trzeba by przeciążyć natywną require funkcję węzła, który jest wysoce niewskazane.

Wzór CommonJS może wydawać się uciążliwy dla Ciebie, ale jest bardzo dobry i nie powinieneś próbować go łamać tylko dlatego, że widziałeś skróty w innych językach/frameworkach.

Wprowadzając jakąś magię w swoim module, nagle zmieniasz wszystko, co programiści mogą (i powinni móc) bezpiecznie założyć na temat samego wzoru CommonJS.

+0

Dziękuję, macek. – 9me

2

Z powodu zgodności jeden-na-jeden w systemie ładowania modułu węzła, nie będzie to możliwe, ale nie będzie zaskoczeniem, jeśli istnieje pakiet dla tej metody.

Najlepsze, co możesz zrobić, to stworzyć plik index.js, który ładuje moduły obecne w katalogu i eksportuje je jako własne.

musisz załadować modele w podobny sposób we wszystkich trzech dirrektorach.

Wiem, że to rozwiązanie nie jest tym, czego szukasz, ale w moim doświadczeniu ta metoda pozwala lepiej zarządzać niestandardowymi pakietami, ponieważ możesz łatwo dodawać i usuwać funkcje.

1

node.js na require pozwala

  1. ładować tylko jeden moduł w czasie, tylko

  2. Załaduj moduły synchronicznej mody.

Tak działa system modułów w pliku Node.js. Ale jeśli chcesz mieć minimatch rodzaju pasującego funkcjonalności, można toczyć jedną na własną rękę, jak to

var path = require("path"), 
    glob = require("glob"); 

function requirer(pattern) { 
    var modules = {}, 
     files = glob.sync(pattern); 

    files.forEach(function(currentFile) { 
     var fileName = path.basename(currentFile); 
     fileName = fileName.substring(0, fileName.lastIndexOf(".js")); 
     modules[fileName] = require(currentFile); 
    }); 

    return modules; 
} 

Zależy to od modułu glob, który pozwala korzystać z wzorców minimatch do wyszukiwania plików, a potem wymagać znaleźć pliki, zapisać je w obiekcie i zwrócić obiekt. I to może być używany jak to

var modules = requirer('./packages/*/model/*.js'); 
console.log(modules.cities); 

P.S: pracuję na co ten się public module już.

Powiązane problemy