2013-06-29 59 views

回答

41

require()真的只是用於JavaScript代碼和json文件,以保持與節點的奇偶性,並提高您的代碼的可讀性給期望require()在節點中工作的外部人員。

而不是使用require()加載文本文件,請考慮使用brfs轉換。隨着BRFS,您可以通過調用fs.readFileSync()但而不是做同步IO作爲節點保持與節點的奇偶,BRFS將內嵌文件內容到束就地所以

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

成爲

var src = "beep boop\n"; 

捆綁輸出。

-t brfs只是編譯:

browserify -t brfs main.js > bundle.js 

更多關於爲什麼超載require()太多的討論是一個壞主意:http://mattdesl.svbtle.com/browserify-vs-webpack

+1

這個工作,只要有問題的模塊是頂層包樹的一部分 - 也就是說,不需要使用'npm install'安裝的軟件包。但我不確定browserify的轉換是否適用於其他已安裝軟件包所需的軟件包。 – kurttheviking

+3

有沒有一種工作只是使用「要求」? – CMCDragonkai

+0

這爲我完成了這個工作,將着色器代碼作爲字符串插入到我的three.js項目中。 – Air

5

如果你真的想使用require(),你可能想看看partialify

my.txt

Hello, world! 

index.js

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

凡Browserify配置: 「你好,世界」

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

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

理論上你將得到一個消息在瀏覽器中。
P.S.我沒有自己嘗試過。

編輯:請注意,這個解決方案突破兼容性的NodeJS - 它只能在browserified狀態,因爲它的NodeJS不知道如何要求.txt文件。

+0

這對我有用。請注意 - 如果你這樣做,而且你也在使用babelify,你需要傳遞一個babelify擴展白名單,以便它只處理你想要的文件(.js,.jsx等)而不是文本文件或任何其他類型的文件,你需要。您可以通過將--extensions標誌傳遞給babelify來完成此操作。 –

相關問題