ReactDom没有使用react和webpack定义

时间:2016-03-24 07:19:59

标签: javascript reactjs webpack

我已经按照这个简单的教程(http://jslog.com/2014/10/02/react-with-webpack-part-1/)来开始使用React和webpack,但在尝试使用更新的语法时会遇到问题。即使用ReactDom调用render而不是已弃用的' React.renderComponent'。

我跑了:

npm install --save react-dom

并添加了

var ReactDom = require('react-dom')

到index.jsx文件并添加

'react-dom': 'ReactDom'

列出' externals'在webpack.config.js中。 (我不确定这是否必要。)

但是我收到了javascript错误,没有定义ReactDom。

webpack.config.js:

module.exports = {
entry: './index.jsx',
output: {
    filename: 'bundle.js', //this is the default name, so you can skip it
    //at this directory our bundle file will be available
    //make sure port 8090 is used when launching webpack-dev-server
    publicPath: 'http://localhost:8090/assets'
},
module: {
    loaders: [
        {
            //tell webpack to use jsx-loader for all *.jsx files
            test: /\.jsx$/,
            loader: 'jsx-loader?insertPragma=React.DOM&harmony'
        }
    ]
},
externals: {
    //don't bundle the 'react' npm package with our bundle.js
    //but get it from a global 'React' variable
    'react': 'React'
},
resolve: {
    extensions: ['', '.js', '.jsx']
}
}

1 个答案:

答案 0 :(得分:5)

如果这是您的代码的精确副本,那么我认为您错误地引用了ReactDOM - DOM中的所有字母都需要大写,如下所示:

var ReactDOM = require('react-dom');

在你的webpack.config.js外部:

'react-dom': 'ReactDOM'

请注意,在设置外部时,Webpack希望您单独加载这些库。例如,通过在HTML(index.html)中放置一个脚本标记,指向CDN的响应和反应,或者对这两个库的内部副本进行反应。所以,这也可能是你遇到问题的原因。

如果要使用节点模块附带的React和ReactDOM版本,请忽略Webpack的外部设置。它会将React和ReactDOM与您自己的脚本捆绑在一起(使bundle.js更长),但它会起作用。据我所知,还有一些其他方法可以解决这个问题(例如使用Express来显示节点模块中的相关文件),但似乎很多人只是将它们捆绑在一起。