??最近想实现个一键换肤,需要配置全局less ,控制全局变量。
??刚开始卡住了,我是先后安装了style-resources-loader 和vue-cli-plugin-style-resources-loader ,以及less-loader 和less ,然后配置vue.config.js ,这样搞的,但是不起作用,一直报错,但是朋友那里就没问题。我的报错内容如下:  ??今天恍然大悟,突然反应过来大概是vue-cli 的版本有所不同,因为我这里的是2版本的,朋友那里好像是3版本的,我创建的是基于 webpack 模板的脚手架项目。
??那么vue-cli2 如何使用less全局变量呢?
1、安装
??首先安装一下sass-resources-loader
npm install sass-resources-loader --save-dev
??然后安装一下less-loader 和less
npm install less-loader@5.0.0 --save
npm install less --save

2、创建全局less文件
??我是在项目的src 文件夹下的assets 文件夹下,新建了theme.less 文件,代码如下:
@textColor: red;

3、配置
??找到项目的build 文件夹下的utils.js 文件,找到exports.cssLoaders = function (options) {} ,添加下面代码:
path.resolve(__dirname, '../src/assets/theme.less')
??然后找到这个函数的return{} ,把``改成下面代码:
less: generateLoaders('less').concat({
loader: 'sass-resources-loader',
options: {
resources: path.resolve(__dirname, '../src/assets/theme.less')
}
}),
??具体如下图所示: 
4、测试
??我是在HelloWorld.vue 文件里,进行测试,  ??npm run dev 运行后,可以看到是ok的,如下图所示: 
5、vue-cli3 时,可以通过配置vue.config.js
??关于我文章开头说的,先后安装style-resources-loader 和vue-cli-plugin-style-resources-loader ,以及less-loader 和less ,然后在根目录配置vue.config.js ,这种方式,在vue-cli3 时是可行的,关于vue.config.js 的配置如下:
const path = require("path");
module.exports = {
pluginOptions: {
"style-resources-loader": {
preProcessor: "less",
patterns: [
path.resolve(__dirname, './src/assets/theme.less'),
],
},
},
};
|