2016-12-02 110 views
2

所以我最近升级到了一个React应用程序的webpack 2。它直接从盒子里运行,没有我改变任何东西,但版本号!大。Webpack 2迁移中断ES6模块导入

但是,现在我试图让它为我捆绑ES6模块(导入,导出等),并且babel和webpack似乎没有很好地协作。

我所做的唯一变化,试图完成,这是我的.babelrc从:

{ 
    "presets": ["es2015", "stage-1", "react"], 
    "plugins": ["transform-object-rest-spread"], 
} 

这样:

{ 
    "presets": [["es2015", {"modules": false}], "stage-1", "react"], 
    "plugins": ["transform-object-rest-spread"], 
} 

的WebPack仍然捆绑这件事而不发出一个错误,但是当我打开应用程序,我得到了可怕的"Warning: React.createElement: type should not be null, undefined, boolean, or number. It should be a string (for DOM elements) or a ReactClass (for composite components)."

Image of error Image of second error

堆栈跟踪把我带回到我的应用程序的第一行(ReactDOM.render(...

从我所看到的这个错误,当您尝试使用import { Component } from './component.js'而非import Component from './component.js'导入其他组件的默认出口通常出现。虽然我不明白为什么会出现这种情况,因为我知道我的代码与babel一起编译它。

任何提示?

回答

1

看起来像["es2015", {"modules": false}]是没有必要的,并导致错误。

通过将babelrc保持原样并将以下插件添加到我的webpack配置中,获得所需的行为:new webpack.optimize.CommonsChunkPlugin({...})new HtmlWebpackPlugin({...})

还根据this great tutorial进行了一些其他配置更改,这些更改还可以帮助您分别捆绑供应商模块,并向您演示如何根据您的react-router路由将代码拆分为块。