reactjs - WebPack 与 React 未捕获引用错误

标签 reactjs webpack

我非常宽松地遵循示例 here直到它开始运行开发服务器。

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

/** @jsx React.DOM */

var React = require('react');

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

module.exports = Test;

我有一个 webpack.config,我在源目录中使用 jsx 加载器(它与 the example 中的加载器基本相同,除了我添加了 library properties )。

我运行 webpack,它会像我期望的那样生成捆绑文件,但是,当我尝试在 html 文件中使用该组件时(包含 bundle.js 脚本引用后),我在控制台中得到以下内容:“ Uncaught ReferenceError :测试未定义”。

HTML 包含以下内容:

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

我是否在做一些不正确的事情来使用以 CommonJS 样式定义的组件来对抗技术上未使用模块加载器的 html 页面(我试图将此测试视为某人正在尝试加载没有任何类型的结构化模块加载器的组件)?

webpack 的输出可用 here

编辑2:完整的示例代码可用 as a github repo

最佳答案

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

否则,Test 需要导出为全局变量,因此您需要遵循与 browserify --standalone 标志类似的约定,该标志看起来有点像像这样:

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

http://webpack.github.io/docs/webpack-for-browserify-users.html#standalone

编辑:查看 GH 存储库后,您可以:

<script src="bundle.js" type="text/js"></script>

而不是

<script src="bundle.js" type="text/javascript"></script>

所以它根本没有加载包。此外,你不能拥有 2 个单独的 React 副本,按照目前的方式,你需要从 webpack 中使用 React,然后你还将它加载到页面上。您应该导出一个接受 React 对象的函数,或者使用全局函数以便能够在包之外使用它。

例如,这可以工作:

/** @jsx React.DOM */
module.exports = function(React) {

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

return Test;
};

然后:

    /** @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')
    );

虽然我无法想象大多数使用 React 包的人会使用脚本标签加载它,并且您通常不需要全局变量,所以最好只使用 CommonJS 风格 require 并让人们理解匀场或其他什么。

关于reactjs - WebPack 与 React 未捕获引用错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25131561/

相关文章:

reactjs - 如何使用 react 从 three.js 模块导入 TrackballControls?

javascript - 如何从 react 组件在浏览器范围中存储一些值?

javascript - React.js 从远程 CDN 插入脚本标签

javascript - 如何使用 JavaScript 创建包含多个可选参数的搜索?

angular - 为什么在 Angular 中使用 Gulp

reactjs - 适用于 Internet Explorer 9 的 React、Webpack 和 Babel

javascript - ESLint 不忽略 .eslintrc.json 中给出的全局变量

node.js - 如何在 react 应用程序中重新加载每个页面时停止 firebase re-auth()?

javascript - Autoprefixer 加载器破坏 Webpack 中的 scss 编译

javascript - Webpack 生成具有相同 contenthash 的不同 block