webpack从入门到原理(高级三)——Include/Exclude和Cache(提高打包构建速度)

706 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第9天,点击查看活动详情

前言

这一篇主要写了webpack中Include/Exclude和Cache的使用!

Include/Exclude

在我们开发的时候需要使用第三方的库或插件,比如vue-routerVuex,z这些文件都会下载到 node_modules 中了。而这些文件都是已经编译好可以直接使用的,所以我们在对 js 文件处理时,要排除 node_modules 下面的文件,所以我们就要用到Include/Exclude

include:包含,只对xxx文件进行编译处理。

exclude:排除,除了xxx文件都进行编译处理。

使用

Include/Exclude主要是针对js文件进行处理

// webpack.dev.js 和 webpack.prod.js
{
    test: /\.js$/,
    // exclude: /(node_modules)/,
    include: path.resolve(__dirname, "../src"), // 也可以用包含
    loader: 'babel-loader',
}
......

plugins: [
new ESLintPlugin({
  context: path.resolve(__dirname, "../src"), // 需要检查的文件路径
  exclude:'node_modules' // 默认就会忽略node_modules
    })
]

注意:Include 和 Exclude只需要写一个就可以了,如果两个都写会报错!生产环境和开发环境同样的配置,完成之后分别进行打包测试即可。

Cache

在我们每次打包时 js 文件都要经过 Eslint 检查 和 Babel 编译,速度比较慢,但是我们并不会每次打包都对所有js文件进行了更改。所以我们可以缓存之前的 Eslint 检查 和 Babel 编译结果,这样第二次打包时就只会对更改过的js文件进行编译处理,这样的话运行的速度就会更快了。

Babel编译缓存

对Babel编译结果进行缓存,需要在options中通过cacheDirectory来开启babel缓存,为了追求打包速度可以关闭对缓存的压缩cacheCompression:false,生产模式和开发模式配置相同。

{
    test: /\.js$/,
    // exclude: /(node_modules)/,
    include: path.resolve(__dirname, "../src"), // 也可以用包含
    loader: 'babel-loader',
    options: {
      cacheDirectory: true, // 开启babel编译缓存
      cacheCompression: false, // 缓存文件不要压缩
    },
 }

运行打包就可以看到在node_modules下多出一个.cache的文件,这个就是babel的缓存文件存放的位置。

image.png

Eslint检查缓存

对Eslint检查结果进行缓存,需要在plugins中通过cache来开启Eslint缓存,可以通过cacheLocation来设置缓存存储的位置,生产模式和开发模式配置相同。

plugins: [
    new ESLintPlugin({
      context: path.resolve(__dirname, '../src'), // 需要检查的文件路径
      exclude:'node_modules',
      cache: true, // 开启缓存
      cacheLocation: path.resolve(__dirname,"../node_modules/.cache/.eslintcache"), // 缓存目录
    })
]

运行打包就可以看到在node_modules/.cache下多出一个.eslintcache的文件,这个就是Eslint的缓存文件。

image.png

小结

通过上面的配置,能够大大提高webpack打包运行的速度!今天是更文的第九天了,加油!!!