Reactjs 带有未捕获引用错误的网页包

Reactjs 带有未捕获引用错误的网页包,reactjs,react-jsx,webpack,Reactjs,React Jsx,Webpack,我非常松散地遵循这个示例,直到它开始运行dev服务器为止 我有一个测试反应组件(在scripts/test.jsx中): /**@jsx React.DOM*/ var React=要求('React'); var Test=React.createClass({ render:function(){ 回你好! } }); module.exports=测试; 我有一个webpack.config,我在其中对源目录使用jsx加载程序(除了添加了一个外,它基本上与中的一个相同) 我运行webpa

我非常松散地遵循这个示例,直到它开始运行dev服务器为止

我有一个测试反应组件(在scripts/test.jsx中):

/**@jsx React.DOM*/
var React=要求('React');
var Test=React.createClass({
render:function(){
回你好!
}
});
module.exports=测试;
我有一个webpack.config,我在其中对源目录使用jsx加载程序(除了添加了一个外,它基本上与中的一个相同)

我运行webpack,它会像我预期的那样生成捆绑包文件,但是,当我尝试在html文件中使用该组件时(包括bundle.js脚本引用后),我在控制台中得到以下信息:“未捕获引用错误:未定义测试”

HTML包含以下内容:

<div id="hi">
</div>
<script type="text/jsx">
    /** @jsx React.DOM */
    React.renderComponent(
      <Test />,
      document.getElementById('hi')
    );
</script>

/**@jsx React.DOM*/
React.renderComponent(
,
document.getElementById('hi')
);
使用CommonJS样式定义的组件来对抗技术上不使用模块加载器的html页面(我试图将此测试视为试图在没有任何类型的结构化模块加载器的情况下加载组件)是否有错误

网页包的输出可用


编辑2:完整的示例代码可用

是的,您最好按照示例进行操作,并要求从.jsx文件中执行
Test
,而不是将其内联到HTML中

否则,
Test
需要作为全局文件导出,因此您需要遵循类似于browserify
--standalone
标志的约定,该标志类似于以下内容:

output: {
    library: "Test",
    libraryTarget: "umd"
}

编辑:查看您的GH回购后,您有:

<script src="bundle.js" type="text/js"></script>
还是这个

/** @jsx React.DOM */
var Test = React.createClass({
    render: function(){
        return <h1>HI!!</h1>
    }
});

module.exports = Test;
/**@jsx React.DOM*/
var Test=React.createClass({
render:function(){
回你好!!
}
});
module.exports=测试;
然后:

    /** @jsx React.DOM */
    React.renderComponent(
      Test(React)(),
      document.getElementById('hi')
    );
    /** @jsx React.DOM */
    React.renderComponent(
      <Test />,
      document.getElementById('hi')
    );
/**@jsx React.DOM*/
React.renderComponent(
,
document.getElementById('hi')
);

虽然我无法想象大多数消费React软件包的人都会用脚本标签加载它,而且你通常不需要全局标签,所以最好使用CommonJS风格的require,让人们了解填隙或其他任何东西。

scrip在Chrome调试器中是什么样子的?已编译脚本是否正确显示在“资源”选项卡中?我已更新该问题,以包含指向已编译输出的链接。这些脚本出现在Chrome debugger的resources选项卡中。我知道UMD包含var/require/common结构,但不应该将libraryTarget设置为var也使该组件可用于页面?此外,我同意使用这种内联HTML不是一个很好的实践。问题是,我正在开发一个库供其他人使用,我不想对他们的设置做太多假设(除了说你需要反应等等)。UMD是一个很好的选项(因为它可以使用Common/Require/inline),但设置UMD选项具有相同的行为。我先用var进行测试,这似乎是最简单的开始方式。那么您在var/umd配置方面仍然存在问题吗?不幸的是,是的。我可以稍后在GitHub或其他平台上抛出测试项目,以便获得完整的源代码。似乎真的有一个配置选项或者我遗漏的东西,但不完全确定是什么。基于gh repo编辑的答案
    /** @jsx React.DOM */
    React.renderComponent(
      Test(React)(),
      document.getElementById('hi')
    );
/** @jsx React.DOM */
var Test = React.createClass({
    render: function(){
        return <h1>HI!!</h1>
    }
});

module.exports = Test;
    /** @jsx React.DOM */
    React.renderComponent(
      <Test />,
      document.getElementById('hi')
    );