2015-07-22 93 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;