第一步 安装 sass-loader 因为在我本地安装最新的sass-loader时会报错:this.getResolve is not a function 查阅资料发现是sass-loader版本过高导致的,所以我这里安装了7.3.1版本的,问题解决,并不会报错.

因为目前高版本的node.js 不适用node-sass,所以更换为sass

在这里插入图片描述

如果你的项目之前有安装过node-sass,请先卸载
npm uninstall node-sass

再安装sass
npm install sass@1.26.5 --save-dev

将sass-loader版本调低一点
npm install sass-loader@7.3.1

npm run dev 再运行一下就可以了

第二步 loader:sass-resources-loader可以访问sass资源任何一个需要访问的sass模块。所以,可以使用共享变量和混合所有SASS样式,而不去每个文件都引用。
进行插件安装:
npm install --save-dev sass-resources-loader
然后在 build 文件夹下找到 util.js 修改sass编译器loader的配置,直接把下面的代码复制进去即可:

  function resolveResource(name) {
    return path.resolve(__dirname, '../src/style/' + name);
  }
  function generateSassResourceLoader() {
    var loaders = [
      cssLoader,
      'sass-loader',
      {
        loader: 'sass-resources-loader',
        options: {
          // 多个文件时用数组的形式传入
          resources: [resolveResource('common.scss'),resolveResource('index.scss')]  
        }
      }
      ];
      if (options.extract) {
        return ExtractTextPlugin.extract({
          use: loaders,
          fallback: 'vue-style-loader'
        })
      } else {
        return ['vue-style-loader'].concat(loaders)
      }
    }
  

我这里引入了两个scss文件 common.scss 和 index.scss
在这里插入图片描述
引入css之后把vue-cli默认的配置修改

修改默认配置
 return {
    css: generateLoaders(),
    postcss: generateLoaders(),
    less: generateLoaders('less'),
   // vue-cli默认sass配置
    // sass: generateLoaders('sass', { indentedSyntax: true }), 
    // scss: generateLoaders('sass'),
    // 新引入的sass-resources-loader
    sass: generateSassResourceLoader(),
    scss: generateSassResourceLoader(),
    stylus: generateLoaders('stylus'),
    styl: generateLoaders('stylus')
  }

如果你只是编译一个文件的话,上面的函数你可以直接省略 在 build 文件夹下找到 util.js 按照下面的修改sass编译器loader的配置

  return {
    css: generateLoaders(),
    postcss: generateLoaders(),
    less: generateLoaders('less'),
    sass: generateLoaders('sass', { indentedSyntax: true }),
    //把你要编译文件引入到这里
    scss: generateLoaders('sass').concat(
      {
        loader: 'sass-resources-loader',
        options: {
          resources: path.resolve(__dirname, '../src/style/common.scss') //这里是单独建的存放变量的scss
        }
     }),
    stylus: generateLoaders('stylus'),
    styl: generateLoaders('stylus')
  }

修改完配置后重启一下服务,就可以在common.scss定义全局变量并且在全局页面中使用(无需在main.js或者app.vue中引入)

你可以在common.scss中这样定义:

$baseColor:'#377CFF';
$baseFontSize:16px;

你可以在任意页面引用 例如 home.vue中这样引用

.testColor{
	color: $baseColor;
	font-size: $baseFontSize;
}

参考文章:Vue引入sass并配置全局变量

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐