使用Webpack 2和React Router进行CSS代码分割
我正在使用React Router和Webpack 2来分割我的JavaScript文件,如下所示:
export default {
path: '/',
component: Container,
indexRoute: {
getComponent(location, cb) {
if (isAuthenticated()) {
redirect();
} else {
System.import('../landing-page/LandingPage')
.then(loadRoute(cb))
.catch(errorLoading);
}
},
},
childRoutes: [
{
path: 'login',
getComponent(location, cb) {
System.import('../login/Login')
.then(loadRoute(cb))
.catch(errorLoading);
},
},
{ /* etc */
}
};
此捆绑包的结果如下:
public/
vendor.bundle.js
bundle.js
0.bundle.js
1.bundle.js
2.bundle.js
这意味着最终用户只能根据他/她所在的路线获取他/她需要的JavaScript。
问题是:对于CSS部分,我没有找到任何资源来做同样的事情,这是根据用户的需要拆分CSS。
有没有办法用Webpack 2和React Router来完成它?
是的,这可以做到。 你需要CommonsChunkPlugin
除了ExtractTextPlugin
。 另外,定义多个入口点
entry: {
A: "./a",
B: "./b",
C: "./c",
},
并配置ExtractTextPlugin
以使用入口点名称作为CSS文件名
new ExtractTextPlugin({
filename: "[name].css"
}),
在这里查看完整的示例:
https://github.com/webpack/webpack/tree/master/examples/multiple-entry-points-commons-chunk-css-bundle
虽然我可能没有回答你的问题如何分割CSS文件,只有必要的加载方式,你想要回答的问题(没有插件或类似的东西),我希望给你一个可能的选择。
styled-components
使用新的ES6特征标签模板文字来设置javascript文件内的组件。 我认为使用这个库会解决你只加载必要的css文件的问题,因为本身不会有更多的css文件。
react-boilerplate
选择styled-components
在sass上,因为
styled-components
有一个更强大的方法:它不是试图给出一个样式语言的编程能力,而是将逻辑和配置拉入到这些功能所属的JS中。
因此,使用styled-components
不仅能解决只加载必要的CSS的问题,而且还会进一步增加应用程序的解耦,使测试应用程序的设计和原因变得更加容易。
这里是现场演示,您可以尝试使用styled-components
并检查它的工作原理。