2013-06-29 9 views

Antwort

41

require() ist wirklich am besten für nur JavaScript-Code und JSON-Dateien, um die Parität mit Knoten zu erhalten und die Lesbarkeit Ihres Codes für Außenstehende zu verbessern, die require() erwarten, so wie es in Knoten funktioniert.

Anstatt require() zum Laden von Textdateien zu verwenden, sollten Sie die brfs Transformation verwenden. Mit BRFs pflegen Sie Parität mit Knoten durch fs.readFileSync() Aufruf aber anstatt das zu tun synchrone IO wie in Knoten wird BRFs inline den Inhalt der Datei in das Bündel an Ort und Stelle so

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

var src = "beep boop\n"; 

wird in die Bündelausgabe.

kompilieren einfach mit -t brfs:

browserify -t brfs main.js > bundle.js 

Weitere Diskussion darüber, warum require() zu viel ist eine schlechte Idee Überlastung: http://mattdesl.svbtle.com/browserify-vs-webpack

+1

Diese so lange das betreffende Modul funktioniert, ist - das heißt, NICHT erforderlich von einem Paket, das mit 'npm install' installiert wurde. Aber ich bin nicht sicher, dass die Transformation von browserify über Pakete funktioniert, die von anderen installierten Paketen benötigt werden. – kurttheviking

+3

Gibt es einen, der nur mit "require" funktioniert? – CMCDragonkai

+0

Das hat den Job für mich getan, indem ich Shader Code als Strings in mein three.js Projekt eingefügt habe. – Air

5

Wenn Sie wirklich verwenden require() wollen, bei partialify schauen Sie möchten:

my.txt:

Hello, world! 

index.js:

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

Wo Browserify konfiguriert ist: "Hallo Welt!"

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

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

Theoretisch erhalten Sie eine Nachricht im Browser.
P.S. Ich habe das selbst nicht versucht.

bearbeiten: beachten Sie, dass diese Kompatibilität NodeJS Lösung bricht - es funktioniert nur in browserified Zustand, wie NodeJS nicht weiß, wie .txt Dateien erfordern.

+0

Das hat für mich funktioniert. Nur eine Anmerkung - wenn Sie dies tun und Sie auch babelify verwenden, müssen Sie eine weiße Liste von Erweiterungen an babelify übergeben, so dass es nur die gewünschten Dateien (.js, .jsx usw.) verarbeitet und keine Textdateien oder was auch immer andere Arten von Dateien, die Sie benötigen. Sie können dies tun, indem Sie ein --extensions-Flag an babelify übergeben. –