2013-06-29 13 views

Odpowiedz

41

require() jest naprawdę najlepszy dla kodu javascript i plików json, aby zachować parzystość z węzłem i poprawić czytelność kodu dla osób postronnych, które oczekują, że require() będzie działał tak samo, jak w węźle.

Zamiast używać require() do ładowania plików tekstowych, należy rozważyć użycie transformacji brfs. Z brfs, utrzymać parytet z węzła wywołując fs.readFileSync() ale zamiast robić synchronicznego IO jak w węźle brfs będzie inline zawartość pliku do wiązki tak

var src = fs.readFileSync(__dirname + '/file.txt'); 

staje

var src = "beep boop\n"; 

w in-place wyjście z pakietu.

Wystarczy skompilować z -t brfs:

browserify -t brfs main.js > bundle.js 

Więcej dyskusja o tym, dlaczego przeciążenia require() nadto jest to zły pomysł: http://mattdesl.svbtle.com/browserify-vs-webpack

+1

Działa to tak długo, jak moduł w pytaniu jest częścią drzewa opakowania najwyższego poziomu - to znaczy, NIE wymagane od pakietu instalowanego z 'npm install'. Ale nie jestem pewien, czy transformacja browserify działa w pakietach wymaganych przez inne zainstalowane pakiety. – kurttheviking

+3

Czy istnieje taki, który działa po prostu używając "wymagać"? – CMCDragonkai

+0

Zrobiłem to za mnie, wstawiając kod cieniowania jako ciągi do mojego projektu three.js. – Air

5

Jeśli naprawdę chcesz używać require(), można zajrzeć do partialify:

my.txt:

Hello, world! 

index.js:

alert(require("my.txt")); 

Gdzie Browserify jest skonfigurowana: "Hello, world"

var partialify = require("partialify/custom"); 
partialify.alsoAllow("txt"); 

bundle.add("./index.js"); 
bundle.transform(partialify); 

Teoretycznie dostaniesz wiadomość w przeglądarce.
P.S. Nie próbowałem tego sam.

Edit: pamiętać, że zgodność tego rozwiązania przerw NodeJS - działa tylko w browserified państwa, jak NodeJS nie umie wymagać .txt plików.

+0

To zadziałało dla mnie. Tylko uwaga - jeśli to zrobisz, a także użyjesz babelify, musisz przekazać białą listę rozszerzeń do babelify, aby przetwarzała tylko żądane pliki (.js, .jsx, itp.), A nie pliki tekstowe czy cokolwiek innego. inne rodzaje plików, których potrzebujesz. Możesz to zrobić, przekazując flagę --extensions do babelify. –

Powiązane problemy