让React Developer Tools与Webpack一起使用

时间:2016-01-05 08:39:48

标签: javascript reactjs npm webpack developer-tools

我遵循这个tutorial在Webpack中将React公开为全局。安装了Expose模块&我在config webpack.config.js文件中添加了模块加载器。然而,它不工作&仍然无法访问React Developer Tools。

这是我的webpack.config.js文件,第一个加载器是expose-react:

var path = require ('path'),
    webpack = require ('webpack'),
    htmlWebpackPlugin = require ('html-webpack-plugin');

const PATHS = {
    app : path.join (__dirname, 'app'),
    build : path.join (__dirname, 'build')
};

module.exports = {
    entry : {
        main : PATHS.app + '/Main.jsx'
    },
    output : {
        path : PATHS.build,
        filename : 'dressAphrodite.js'
    },
    module : {
        loaders : [
            {
                test : require.resolve ('react'),
                loader : 'expose?React'
            },
            {
                test : /\.css$/,
                loaders : ['style', 'css'],
                include : PATHS.app
            },
            {
                test : /\.js?$/,
                loader : 'babel-loader',
                include : PATHS.app
            },
            {
                test : /\.jsx?$/,
                loader : 'babel-loader',
                include : PATHS.app
            }
        ]
    },
    debug : true,
    devtool : 'source-map',
    devServer : {
        contentBase : './app',
        progress : true,
        stats : 'errors-only',
    },
    plugins : [
        new htmlWebpackPlugin ({
            title : 'Dress',
            hash : true
        })
    ]
};

只是为了安装依赖项的信息,这是我的package.json文件:

{
  "name": "dress",
  "version": "1.0.0",
  "description": "",
  "main": "./main.jsx",
  "dependencies": {
    "i": "^0.3.3",
    "npm": "^3.5.2",
    "react": "^0.14.3",
    "react-dom": "^0.14.3"
  },
  "devDependencies": {
    "babel-core": "^6.3.26",
    "babel-loader": "^6.2.0",
    "babel-polyfill": "^6.3.14",
    "babel-preset-es2015": "^6.3.13",
    "babel-preset-react": "^6.3.13",
    "css-loader": "^0.23.1",
    "expose-loader": "^0.7.1",
    "html-webpack-plugin": "^1.7.0",
    "style-loader": "^0.13.0",
    "webpack": "^1.12.9",
    "webpack-dev-server": "^1.14.0"
  },
  "scripts": {
    "start": "webpack-dev-server"
  },
  "author": "",
  "license": "ISC"
}

这是.babelrc文件内容:

{
  'presets' : [
    'es2015',
    'react'
   ]
}

3 个答案:

答案 0 :(得分:10)

实际上有一个解决方案,您必须在more here上使用--inline选项启动webpack,因此服务器将位于localhost:8080而不是localhost:8080 / webpack-dev-server,热重新加载仍然有效,你将能够看到你的反应工具:D

答案 1 :(得分:5)

我有同样的问题。但是,the devtools FAQ目前声明“目前iframe和Chrome应用/扩展程序无法检查”,而网络包运行在iframe中。

答案 2 :(得分:4)

自React 0.12起,您不再需要将React公开为全局。

重要提示:如果您在不使用服务器的情况下直接打开html文件,换句话说,如果您使用 file:// 网址,则需要允许访问这些网址的扩展程序:要执行此操作,请转到设置>扩展程序,查找React Developer Tools并选中“允许访问文件网址”框。

捆绑使用jsx语法编写的React文件时,需要将文件转换为纯javascript。要做到这一点,你需要使用已经安装但未在webpack.config.js中使用的babel-preset-react。

您也不需要在webpack.config.js中导入webpack,并且 loaders 数组中的对象中的 test 属性是一个正则表达式,所以/.jsx?$/足以匹配js或jsx文件。

以下是如何输出React文件包的一个工作示例(我删除了html-webpack-plugin,因此您需要编写自己的页面)

<强> webpack.config.js

var path = require ('path');

var PATHS = {
    app : path.join (__dirname, 'app'),
    build : path.join (__dirname, 'build')
};

module.exports = {
    entry : {
        main : PATHS.app + '/main.js'
    },
    output : {
        path : PATHS.build,
        filename : 'bundle.js'
    },
    module : {
        loaders : [
            {
                test : /\.jsx?$/,
                loader : 'babel',
                query: {
                    presets: ['react']
                }
            }
        ]
    }
};

<强> main.js

var React = require('react');
var ReactDOM = require('react-dom');
var Component = require('./component.js');

ReactDOM.render(
  <Component />,
  document.getElementById('test')
);

<强> component.js

var React = require('react');

var Test = React.createClass({
  diplayName: "Test",

  render: function () {
    return (
      <div>Test</div>
    );
  }

});

module.exports = Test;

<强>的index.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Test</title>


  </head>
  <body>
    <div id="test"></div>

    <script src="bundle.js"></script>
  </body>
</html>