less-loader 速度很慢问题分析

背景描述

  1. 使用技术栈typescriptreactreact-routermobxless
  2. 问题描述:最近新开发一个项目,本来就是很正常的进行 webpack 的配置,项目刚开始,本就没有多少业务代码,启动的时候总觉得有点慢,让我很是迷惑,这项目不是应该 3、 5 秒就跑起来的吗?怎么总是住了,我很是疑惑,所以就用 speed-measure-webpack-plugin 进行测速,结果就如下图

在这里插入图片描述
这样看来问题就很明显了呀,但是,项目刚开始,less 文件都没有几个,代码也都很少,为什么能占用这么多时间呢?

问题分析

1. 是 less-loader 的问题?

我的第一个感觉会不会是 less-loader 慢呢?但是我转念一想,这不可能呀,只听过 babel-loaderts-loader 慢,没听过 less-loader 慢呀,就算慢,这是不是有点太慢了?我觉得不太可能,所以并没有在这个方向上耗费多少时间

2. 用 thread-loader 加速?

我在社区上寻找遇到相同问题的人,以求获得解决方案,但是收获甚少,有人觉得慢,但是大家给出的方案都是用 thread-loader 或者 happypack。但是这显然不符合我自身的场景,thread-loader 要在多文件的情况下,开始多进程/多实例才有效果,如果文件数量少,反而会使打包速度变慢。

3. 检查配置

我把注意力转到我的 webpack 配置上,我觉得应该是配置出了问题,一番检查之后,并没有发现什么 “不合理” 的地方,唯一觉得少点什么的,应该就是没有在 loader 上配置 includeexclude,我尝试着把 include 的配置上去,但是几乎没有效果。我把目光锁在这个 loader 上,经过半个小时的挣扎后,我觉得把里头的配置都理一遍,最后发现,一处可疑的点

module.exports = {
	...
	module: {
		rules: [
			...
			{
				test: /\.less|css$/,
		        exclude: '/node_modules',
		        include: srcPath,
		        use: [
		          { loader: devMode ? 'style-loader' : MiniCssExtractPlugin.loader },
		          {
		            loader: 'css-loader',
		            options: {
		              importLoaders: 1
		            }
		          }
		          ...
		        ]
	      	}
	      }
		]
	}
	...
}

importLoaders 的值是1?我为啥要配置这个呢?可能是抄了之前项目的配置忘了改了,我就去查了一下这个 importLoaders 的作用,这 Stack Overflow 看到这样一个回答:
在这里插入图片描述

大致意思就是:css 文件中如果有 @import 语句,importLoaders 的作用是决定 @import 模块在使用 css-loader 前,要使用几个其它的loader 处理。但是 importLoaders 只对没有(unresolved) 的 @import 起作用。所以我觉得把这个 options 去掉。默认值是0。

最后结果(如图)符合预期。
在这里插入图片描述

总结

在做项目配置的时候,最好是理清楚每一个配置项的作用和目的之后再进行配置,不然很容易导致一些未知的问题,并且排查起来也没有思路。平时也要多总结,多做记录。就像网站的访问记录一样,要留住有价值的信息。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
安装less-loader和less的步骤如下: 1. 确定你正在使用的webpack版本。根据webpack的版本选择合适的less-loader版本。例如,如果你使用的是webpack@4,那么可以选择less-loader@5~7版本。 2. 打开命令行终端,运行以下命令来安装less-loader: ``` npm install less-loader@7 --save-dev ``` 3. 确保你已经安装了webpackwebpack-cli。如果还没有安装,请运行以下命令来安装它们: ``` npm install webpack webpack-cli --save-dev ``` 4. 在webpack配置文件(通常是webpack.config.js)中添加less-loader的配置。参考以下示例: ``` module.exports = { // ... module: { rules: [ { test: /.less$/, use: [ { loader: "style-loader" }, { loader: "css-loader" }, { loader: "less-loader", options: { strictMath: true, noIeCompat: true } } ] } ] } }; ``` 5. 在需要使用less语法的样式文件中,将style节点的lang属性设置为'less'。例如: ```html <style lang="less" scoped> /* 样式内容 */ </style> ``` 总结:按照以下步骤安装less-loader和less: 1. 确定webpack的版本,选择合适的less-loader版本; 2. 使用npm命令安装less-loader,例如:npm install less-loader@7 --save-dev; 3. 确保已安装webpackwebpack-cli,如果没有请使用npm install webpack webpack-cli --save-dev安装; 4. 在webpack配置文件中添加less-loader的配置; 5. 在需要使用less语法的样式文件中,将style节点的lang属性设置为'less'。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值