前端小白求帮助

2017-07-13 19:37:33 +08:00
 CodingPuppy

我在做一个 React library,通过 webpack 打包。在 webpack.config 中配置不打包 react 和 react-dom。

var webpackConfig = {
  entry: './components',
  output: { 
    path: path.resolve(__dirname, 'dist'),
    filename: 'react-table.js',
    library: 'ReactReport',
    libraryTarget: 'umd'
  },
  module: {
    loaders: [
      {
        test: /.js?$/,
        loader: 'babel-loader',
        exclude: /node_modules/,
        query: {
          presets: ['es2015', 'react']
        }
      }
    ]
  },
  externals: {
    react: {
      root: 'React',
      commonjs2: 'react',
      commonjs: 'react',
      amd: 'react'
    },
    'react-dom': {
      root: 'ReactDOM',
      commonjs2: 'react-dom',
      commonjs: 'react-dom',
      amd: 'react-dom'
    }
  },

在 webpack 中,暴露 react-table 中的 ReactReport 对象到全局。 然后在 html 中这么写,

<body>
  <div id="root">
  </div>

  <script src="../dist/react-table.js"></script>
  <script src="https://cdn.bootcss.com/react/15.6.1/react.min.js"></script>
  <script src="https://cdn.bootcss.com/react/15.6.1/react-dom.min.js"></script>
  <script>
    var ReactReport = ReactReport.ReactReport;
    var serverData = {someData};
    var App = React.createElement(
      ReactReport,
      { data: serverData }
    );
    ReactDOM.render(App, document.getElementById('root'));
  </script>

</body>

运行会报错,找不到 React.Component,

Cannot read property 'Component' of undefined

我在 html 中不是写了 cdn 的 React 了吗?有朋友知道为什么么? google 一下午了。。

完全前端新手,webpack 基本是混沌状态

1992 次点击
所在节点    程序员
2 条回复
CodingPuppy
2017-07-13 19:50:52 +08:00
查了一下午,v 站提完问题,休息了一会。发现是这个问题:
```
<script src="../dist/react-table.js"></script>
<script src="https://cdn.bootcss.com/react/15.6.1/react.min.js"></script>
<script src="https://cdn.bootcss.com/react/15.6.1/react-dom.min.js"></script>
```
要把 react 和 react-dom 写到最前面。。。

唉,幸亏我不是前端工程师,这个领域的坑比 Android 什么的多到不知道哪里去了
tnaxismdc
2017-07-13 20:01:35 +08:00
是的,引用顺序很重要

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/375147

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX