webpack,react和babel:Uncaught TypeError:超级表达式必须为null或函数,而不是未定义

时间:2016-01-28 01:43:37

标签: javascript node.js reactjs webpack babeljs

我在webpack上关注此tutorial并做出反应。似乎每隔一步我遇到一个错误,因为对npm或节点的反应或反应或< insert js thing>

但这次......我从webpack收到错误或做出反应:

foreach($request_list as $k => $v) {
    parse_str(parse_url($v['url'], PHP_URL_QUERY), $params);
    $req = Request::create(
        parse_url($v['url'], PHP_URL_PATH),
        "POST",
        $params
    );

    $context = new RequestContext();
    $context->fromRequest($req);
    $route = $this->get('router');
    $matcher = new UrlMatcher($route->getRouteCollection(), $context);

    $dispatcher = new EventDispatcher();
    $dispatcher->addSubscriber(new RouterListener($matcher));
    $resolver = new ControllerResolver();
    $kernel = new HttpKernel($dispatcher, $resolver);

    $response = $kernel->handle($req, HttpKernelInterface::SUB_REQUEST);
    $res[$k] = $response->getContent();
}

以下是代码:

应用程序/ index.jsx

Uncaught TypeError: Super expression must either be null or a function, not undefined

应用/组件/ App.jsx

import './main.css';

import React from 'react';
import ReactDOM from 'react-dom';
import App from './components/App.jsx';

ReactDOM.render(<App />, document.getElementById('app'));

应用/组件/ Note.jsx

import React from 'react';
import Note from './Note.jsx';

export default class App extends React.Component {
  render() {
    return <Note />;
  }
}

我正在使用

  • 反应0.14.6
  • react-dom ^ 0.14.6
  • node 5.3.0
  • npm 3.5.3
  • babel-core ^ 6.4.5
  • babel-loader ^ 6.2.1

提前谢谢。

3 个答案:

答案 0 :(得分:1)

我一直在努力解决这个问题。问题在于循环依赖——如果你有一个扩展另一个类的类,但它们都导入了一个相互导入的类,那么超级表达式将简单地解析为未定义。以下是如何触发它的示例:

A.ts

import './C';

class A extends B {
}

B.ts

import './C';

class B {
}

C.ts

import './A';

// Library code here

在这种情况下,类 A 被认为是在扩展 undefined,因为依赖树变成了循环(因为 C 需要 A 需要 B 需要 C,等等)并且引擎似乎只是“放弃”并将超类构造函数解析为未定义。就我而言,我从 C 移走了我需要的一些功能,以便 B 不再导入它。它打破了循环依赖——它的作用就像一个魅力!

答案 1 :(得分:0)

我认为您需要在app类中定义构造函数:

import React from 'react';
import Note from './Note.jsx';

export default class App extends React.Component {

  constructor(props){
    super(props);
  }

  render() {
    return <Note />;
  }
}

此外,您的Note组件应该与App:

类似地设置
import React from 'react';

export default class Note extends React.Component{

  constructor(props){
    super(props);
  }

  render() {
    return <div>Learn Webpack!</div>
  }
}

答案 2 :(得分:0)

如果通过 Terser 插件应用Webpack优化时出现问题,请尝试使用 UglifyJS

const UglifyJsPlugin = require('uglifyjs-webpack-plugin');

module.exports = function override(config, env) {
  config.optimization = {
    minimizer: [new UglifyJsPlugin()]
  };

  return config;
};

对我有用。