排除来自webpack bundle的反应

r.g*_*ory 30 webpack

我正在尝试排除webpack生成的bundle的反应.原因是,我们在页面上有一个全局版本的反应,所以我将使用它.

我已尝试使用下面的内容,如此处建议的Webpack和外部库,但这似乎不起作用.我可以看到webpack已经导出了React但它仍然出现在bundle中.

externals: {
  'react': 'React'
}
Run Code Online (Sandbox Code Playgroud)

我在想它可能是另一个依赖,例如反应路由器导入反应?有没有人设法做到这一点?

小智 24

我遇到了和你一样的问题.被困了一晚,找到了答案,react-dom要求react/lib/ReactDOM,其中还包括react在捆绑中.解决方案如下所示:

externals: {
 'react': 'react', // Case matters here 
 'react-dom' : 'reactDOM' // Case matters here 
}
Run Code Online (Sandbox Code Playgroud)

然后添加react-dom到页面中的脚本标记.


sli*_*wp2 12

webpack 配置:

externals: {
    'react': 'React',
    'react-dom': 'ReactDOM',
    'react-router': 'ReactRouter'
}
Run Code Online (Sandbox Code Playgroud)

将这些添加到index.html身体的底部.

<script src="http://cdn.bootcss.com/react/15.4.1/react.js"></script>
<script src="http://cdn.bootcss.com/react/15.4.1/react-dom.js"></script>
<script src="http://cdn.bootcss.com/react-router/2.8.1/ReactRouter.js"></script>
Run Code Online (Sandbox Code Playgroud)

并且,在您的entry文件中,可能index.js:

var React = require('react');
var ReactDOM = require('react-dom');
var ReactRouter = require('react-router');

const App = () => {
    return <div>
        webpack externals
    </div>
};

ReactDOM.render(
    <App/>,
    document.getElementById('container')
);
Run Code Online (Sandbox Code Playgroud)


小智 -3

您只需创建多个条目即可将 React 与应用程序包分开。例如,您可以使用 webpack CommonsChunkPlugin 执行以下操作:

module.exports = {
entry: {
    "app": "your app entry file",
    "react" : "react"
},
plugins: [
    new webpack.optimize.CommonsChunkPlugin("react", "react.bundle.js")
   ]
}
Run Code Online (Sandbox Code Playgroud)