2015-07-22 42 views
2

在我的nwjs應用程序我使用反應構建我的用戶界面。目前,React正在通過主文件index.html中的<script>標記加載。 index.html還有另一個<script>標記,它加載main.js,其中包含代碼,該代碼定義並呈現我的組件React組件以及要求(require())一些Node模塊,如「fs」和「McFly」。nwjs reactjs,對我的上下文感到困惑。文檔未定義

這一切似乎工作,但是當我嘗試使用另一個節點模塊(react-inlinesvg)我得到一個錯誤,「文件是未定義的」。

已經在網上尋求幫助,我得出結論反應現在認爲它正在服務器上運行?奇怪的是,和我之前開始使用react-inlinesvg模塊一樣,它很高興地使用React.render(客戶端渲染)渲染組件。

如果您需要更多的上下文或信息,請詢問。

回答

1

它可能是你在服務器端渲染,或者你也渲染雙方。在第二種情況下,你可以簡單的窩,是造成你與錯誤行:

if (process.env.BROWSER) { 
    the line causing the error 
} 

如果錯誤消失,這意味着你是在服務器端也! 我希望這有助於...

基本上,如果你的代碼是universal(或同構,如果你想...)這個檢查只能在客戶端執行代碼,要做到這一點使用尤其是樣式表,例如:

if (process.env.BROWSER) { 
    require("../style/main.scss"); 
} 

當然,如果你想要做的東西服務器端,您可以檢查

if (!process.env.BROWSER) { 

} 
+0

嗨,對不起,只是爲了澄清這使得'if'中的任何代碼在瀏覽器上下文中運行? – rssfrncs

+0

它檢查瀏覽器上下文是否爲真。所以我想是的,我會盡量讓我的答案更清晰一些! – piratz

0

如果任何人面對這樣他可以在2種方式解決它:

解決方案1:如果您使用nw.js 15或以上的嘗試,以使混合上下文模式: 在你的package.json添加此標誌:

"chromium-args": "--mixed-context" 

解決方案2:暴露文件的全球對象使用此黑客:

global.document = window.document; 
global.document = window.document;