使用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并检查它的工作原理。

链接地址: http://www.djcxy.com/p/95259.html

上一篇: CSS Code Splitting with Webpack 2 and React Router

下一篇: Circle Progress Bar Using Bootstrap