一个背景我在vue2项目上用的比较少。安装less和less-laoder后,编译项目时提示如下问题:Modulebuildfailed(from./node_modules/less-loader/dist/cjs.js):TypeError:this.getOptionsisnotafunction2排错一上网搜了下,发现一篇文章说less-loader版本太高,安装低版本没问题,比如5.0.0。我查了一下我现在安装的是less-loader@8.0.0,降级到less-loader@v5.0.0后确实没问题。但这真的那么简单吗?为什么高版本不可用?为什么是5.0.0?查了一下项目之前运行没有问题的版本是v7.2.0,这个版本没有问题。后来仔细查找,发现是less-loader高版本的配置发生了变化。使用less-loader前,建议先配置//webpack.config.jsmodule.exports={...module:{rules:[{test:/.less$/,use:[{loader:"style-loader"},{loader:"css-loader"},{loader:"less-loader",options:{strictMath:true,noIeCompat:true}}]}]}};请注意,使用了选项:{}。但是在8版本中,正式版是:module.exports={module:{rules:[{test:/.less$/i,use:[{loader:"style-loader",},{loader:"css-loader",},{loader:"less-loader",options:{lessOptions:{strictMath:true,},},},],},],},};这里注意options:{lessOptions:}}发现8版本有了重大升级:之前我们用~来解决路径引用问题,现在8版本解决了这个bug,可以不用再依赖~了,这带来了配置文件字段的变化。3.解决问题。由于我们已经知道版本8的配置发生了变化,所以很容易解决。根本的解决办法是稍微修改之前的选项,加入lessOptions:module.exports={...module:{rules:[{test:/.less$/,use:[...{loader:"less-loader",options:{+lessOptions:{strictMath:true,noIeCompat:true+}}}]}]}};vue-cli如果使用vue-cli创建项目,可以在vue.config.js上自定义less-loader配置:chainWebpack:config=>{config.module.rule('less').use('less-loader').loader('less-loader').options({lessOptions:{/**less-loaderconfig*/strictMath:true,noIeCompat:true}})快速解决办法最简单的解决办法就是降版本,8之前的版本是7.3.0,所以我们想在不改变配置的情况下解决问题,降级为7.3.0没问题:npminstallless-loader@7.3.0--save-dev
