Skip to content
On this page

1. 问题

vue项目 3个页面引用了相同的一个css文件 index.d3ec8bd9.css。

该3个css文件有3个页面的不同css,虽然有scoped做了限制,但是显然不符合我们的预期,我们希望不同的页面引入不同的css文件。

2. 原因

经过仔细排查,发现只有这三个项目的css存在该问题,那么应该不是项目配置的问题;

最后发现是页面路由配置的问题,龙舟项目的路由是如下配置

routes: [
​
            {
​
                path: '/',
​
                name: 'index',
​
                component: () => import(/* webpackChunkName: "index" */'./modules/index'),
​
            },
​
            {
​
                path: '/rule',
​
                name: 'rule',
​
                component: () => import(/* webpackChunkName: "rule" */'./modules/rule'),
​
            },
​
            {
​
                path: '/ranking',
​
                name: 'ranking',
​
                component: () => import(/* webpackChunkName: "ranking" */'./modules/ranking'),
​
            },
​
        ]

而后两个是复制的 第一个的项目路由,代码如下

routes: [
​
            {
​
                path: '/',
​
                name: 'index',
​
                component: () => import(/* webpackChunkName: "index" */'./modules/index'),
​
            },
​
        ],

发现异步加载的页面 webpackChunkName 都为 index,所以最后 会把 3个页面的 css 都提取到 index 开头的css文件中

3. 解决方案

a) 放弃使用异步加载,因为不确定项目中是否有其他人使用了相同的webpackChunkName

routes: [{
​
        path: '/',
​
        name: 'index',
​
        component: index,
​
    }

b) 使用与页面相关的 webpackChunkName

routes: [{
​
        path: '/trace',
​
        name: 'trace',
​
        component: () => import(/* webpackChunkName: "2019-ncov-more" */'./pages/trace'),
​
    }

推荐 首页不使用异步加载,其他页使用异步加载

routes: [{
​
        path: '/',
​
        name: 'index',
​
        component: index,
​
    }, {
​
        path: '/trace',
​
        name: 'trace',
​
        component: () => import(/* webpackChunkName: "2019-ncov-more" */'./pages/trace'),
​
    }