2013-01-19 13 views
8

Napisałem prosty moduł npm, aby wstępnie skompilować szablony kierownicy podczas używania kompresora django do przetwarzania końcowego dla niektórych komponentów po stronie klienta i odkryłem, że muszę wysłać moduł npm z kilkoma plikami js.Jak odwoływać się do plików lokalnych w module npm?

Obecnie po prostu założyć, nikt nie instaluje to z globalną flagę bo już „na sztywno” ścieżkę do tych zależności w module npm samego

przykład układ mojego modułu npm

/
*/bin
* /lib/main.js
* /vendor/ember.js

teraz wewnątrz main.js chcę użyć żaru js plik ... Obecnie mój ciężko kodowane podejście wygląda następująco

var emberjs = fs.readFileSync('node_modules/django-ember-precompile/vendor/ember.js', 'utf8'); 

Ponownie -To działa tylko dlatego zakładam go zainstalować lokalny ale chciałbym myśleć node.js ma bardziej legit sposób, aby uzyskać lokalnie osadzone pliki:

Ktoś wie, w jaki sposób mogę poprawić to, aby było bardziej przyjazne?

Odpowiedz

1

Co można zrobić, to uzyskać katalog bieżącego pliku i utworzyć ścieżki do pliku.

var path = require('path') 
, fs = require('fs'); 

var vendor = path.join(path.dirname(fs.realpathSync(__filename)), '../vendor'); 
var emberjs = fs.readFileSync(vendor + '/ember.js', 'utf8'); 

Mam nadzieję, że pomoże!

3

Jedną z największych zalet Node.js jest szybkość działania. Minusem tego podejścia jest to, że jesteś zmuszony dopasować wzorce projektowe, które zostały zbudowane.

Jest to przykład, w którym Twoje podejście różni się zbytnio od podejścia Węzły. Węzeł oczekuje, że wszystko w module będzie widoczne z eksportu modułów, w tym z szablonów.

Przenieś readFileSync do modułu , a następnie wyświetl otrzymaną wartość przez eksport modułu w postaci lib/main.js.

Przykład:

package.json 
    { 
    "name": "django-ember-precompile", 
    "main": "lib/main.js" 
    } 
lib/main.js 
    module.exports.ember = readFileSync('vendor/ember.js') 
vendor/ember.js 

uzyskać szablonu poprzez

var template = require('django-ember-precompile').ember 

Ten przykład może być rafinowane, ale ideą jest taka sama.

Powiązane problemy