cache-loader缓存失效后如何避免重复编译?
我在Vue项目里用了cache-loader,第一次构建确实快很多。但每次修改代码后缓存都会失效,导致全量编译时间反而更长,这到底是怎么回事?
尝试过在webpack配置里这样写:{ test: /.vue$/, use: ['cache-loader', 'vue-loader'] },但发现只要修改任何.vue文件,所有文件都会重新编译。
查文档说可以加标识符参数,但这样配置后:
module.exports = {
module: {
rules: [
{
test: /.vue$/,
use: [
{
loader: 'cache-loader',
options: { ident: 'vue-component' }
},
'vue-loader'
]
}
]
}
};
还是会出现缓存频繁失效的情况,有没有更好的解决办法?
cacheDirectory和cacheIdentifier这两个选项。首先确保
cacheDirectory指向一个合适的位置,最好是项目根目录下的一个独立文件夹,这样可以减少与其他缓存冲突的可能性。然后cacheIdentifier你可以使用一个更复杂的标识,比如结合项目版本号或者某个环境变量,这样在这些条件不变的情况下,即使文件内容有小改动,也不至于每次都重建缓存。下面是一个稍微改过的配置示例,你可以试试看:
pre class="pure-highlightjs line-numbers">
module.exports = {
module: {
rules: [
{
test: /.vue$/,
use: [
{
loader: 'cache-loader',
options: {
cacheDirectory: path.resolve(__dirname, '.cache-loader'),
cacheIdentifier: 'vue-cache-' + process.env.npm_package_version
}
},
'vue-loader'
]
}
]
}
};
这段代码假设你在package.json里有version字段,并且使用npm来管理你的依赖。这样配置之后,只要你的npm包版本不变,缓存就不会轻易失效。当然,如果代码逻辑有重大变化,可能还是需要重新构建一次,这也是合理的。
希望这个方法能帮到你,有时候这些小工具就是有点儿捉摸不透,不过多试几次总能找到合适的设置。
装完loader记得清缓存目录,不然老缓存还带着旧路径信息。