在 vue 中,可以通过以下方法,解决既可以在组件中使用全局变量,也可以在 less 文件中使用全局变量

已经安装 less 和 less-loader 的进行下面的操作,如果没有安装的就先安装这两个依赖

# 过渡 3.0 版本的 vue-cil 解决方案

定义一个存放变量的 less 文件 安装 style-resources-loader , vue-cli-plugin-style-resources-loader

npm i style-resources-loader vue-cli-plugin-style-resources-loader -D

在 vue.config.js 中,把变量的 less 文件配置进去

const path = require('path'); // 这个是需要的
module.exports = {
  pluginOptions: {
    // 添加下面这段。src/style/globalValue.less为存放变量的路径+文件
    'style-resources-loader': {
      preProcessor: 'less',
      patterns: [path.resolve(__dirname, 'src/style/globalValue.less')],
    },
  },
};

起服务无报错忽略;有报错(cannot read property ‘srtle-resources-loader’ of undefined),就在 vue.config.js 中添加以下这段代码

pluginOptions: {
  "style-resources-loader": {
    preProcessor: "less",
    patterns: [],
  },
},

# 2.0 版本的解决方案

安装依赖 sass-resources-loader

npm i sass-resources-loader -D

安装完 sass-resources-loader 后,咱们还需要简单配置下 webpack 找到 build/utils.js 文件 在 cssLoaders 函数中添加使用全局 less 函数

function lessResourceLoader() {
  // 增加全局使用less函数
  var loaders = [
    cssLoader,
    'less-loader',
    {
      loader: 'sass-resources-loader',
      options: {
        resources: [
          path.resolve(__dirname, '../src/style/_color.less'), //定义全局变量的文件路径
        ],
      },
    },
  ];
  if (options.extract) {
    return ExtractTextPlugin.extract({
      use: loaders,
      fallback: 'vue-style-loader',
    });
  } else {
    return ['vue-style-loader'].concat(loaders);
  }
}

在 return 中用 lessResourceLoader() (代表的是你写函数所使用的名字,自己可以起任意名字) 替换之前 less 函数

return {
  css: generateLoaders(),
  postcss: generateLoaders(),
  less: lessResourceLoader(), // 替换之后
  // less: generateLoaders('less'), // 原webpack配置的
  sass: generateLoaders('sass', { indentedSyntax: true }),
  scss: generateLoaders('sass'),
  stylus: generateLoaders('stylus'),
  styl: generateLoaders('stylus'),
};

操作完后记得重启,还有就是文件里面最好只写变量和函数,不做实际样式操作