Vue--整合Scss--使用/实例

原文网址:Vue--整合Scss--使用/实例_IT利刃出鞘的博客-CSDN博客

简介

        本文用示例介绍Vue如何整合Scss。

创建Vue项目

创建方法见:@vue/cli4--使用图形化界面创建项目--方法/实例_IT利刃出鞘的博客-CSDN博客

需要注意的是,上边这个网址中的“选择组件”这一步,需要选择CSS 预处理器(“CSS Pre-processors”),并选择“Sass/SCSS (with node-sass)”

本处我创建的项目为:demo_vue_scss,如下图所示:

安装Scss依赖(如果没安装)

        如果在创建项目时没有选择CSS 预处理器,我们也可以手动安装sass-loader node-sass来集成scss。

首先进入项目的根目录(本文是demo_vue_scss目录),然后执行如下命令:

扫描二维码关注公众号,回复: 14399846 查看本文章
npm install -D [email protected] [email protected]

执行完之后可以发现,package.json中加入了sass-loader和node-sass依赖:

注意

如果直接引入最新版会有问题,比如:

​npm install -D node-sass sass-loader

这样引入的是最新版本的,一般会因为版本不匹配而导致报错。解决方法见:Vue--解决Scss报错:Syntax Error: TypeError: this.getOptions is not a function_IT利刃出鞘的博客-CSDN博客

配置(非必须)

        实际上,在安装了sass-loader之后,无需任何配置即可使用。vue-loader预处理器会自动根据lang属性判断出要使用的loaders。

        下边介绍自己想要个性化配置时的方法。

方案1:vue.config.js

官网:https://cli.vuejs.org/zh/guide/css.html#向预处理器-loader-传递选项

module.exports = {
  css: {
    loaderOptions: {
      // 给 sass-loader 传递选项
      // sass: {
      //   // @/ 是 src/ 的别名
      //   // 所以这里假设你有 `src/variables.sass` 这个文件
      //   // 注意:在 sass-loader v8 中,这个选项名是 "prependData"
      //   additionalData: `@import "~@/variables.sass"`
      // },
      
      // 默认情况下 `sass` 选项会同时对 `sass` 和 `scss` 语法同时生效
      // 因为 `scss` 语法在内部也是由 sass-loader 处理的
      // 但是在配置 `prependData` 选项的时候
      // `scss` 语法会要求语句结尾必须有分号,`sass` 则要求必须没有分号
      // 在这种情况下,我们可以使用 `scss` 选项,对 `scss` 语法进行单独配置
      scss: {
        additionalData: `@import "~@/variables.scss";`
      },
      
      // 给 less-loader 传递 Less.js 相关选项
      // less:{
      //   // http://lesscss.org/usage/#less-options-strict-units `Global Variables`
      //   // `primary` is global variables fields name
      //   globalVars: {
      //     primary: '#fff'
      //   }
      // }
    }
  }
}

方案2:/build/webpack.base.conf.js

在webpack.base.conf.js 文件里配置 rules:

rules:[
    // ...
    
    {
        test: /\.scss?$/,
        loaders: ["style", "css", "sass"]
    }
]

代码

views下添加页面(使用scss)

在/src/views下新建Demo.vue,内容如下:

<template>
  <div>
    这是SCSS测试
  </div>
</template>

<script>
export default {
  name: "Demo"
}
</script>

<style scoped lang="scss">
$color: red;
div {
  color: $color;
}
</style>

App.vue里引入

<template>
  <div id="app">
    <div id="nav">
      <router-link to="/">Home</router-link> |
      <router-link to="/about">About</router-link>
    </div>
    <!--<router-view/>-->
    <demo></demo>
  </div>
</template>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
}

#nav {
  padding: 30px;
}

#nav a {
  font-weight: bold;
  color: #2c3e50;
}

#nav a.router-link-exact-active {
  color: #42b983;
}
</style>

<script>
import Demo from "./views/Demo";
export default {
  components: {Demo}
}
</script>

改动指出之处如下:

测试

启动服务:npm run serve

启动完毕后,访问:http://localhost:8080/

结果:

猜你喜欢

转载自blog.csdn.net/feiying0canglang/article/details/125625169
今日推荐