Hot Zellah
Hot Zellah

Reputation: 1081

How to Import sass files in angular 6

I created new angular project with sass, and I created folder with name sass which contain a file named _variables.scss,

in app component I tried to import variables like this.

@import 'variables'

when I run ng serve i get the following error:

./src/app/app.component.scss Module build failed:

@import 'variables'
^
      File to import not found or unreadable: variables.
      in C:\Users\Bonge\Documents\Projects\movies_database\movies-client\src\app\app.component.scss (line 1, column 1)

Note I added the following to angular.json:

"stylePreprocessorOptions": { "includePaths": [ "src/", "src/sass/" ]

Directory structure just a angular starter app:

|- src/
    |- sass/
        |- _variables.scss
        |- _mixins.scss
        |- styles.scss

still i get the same error: what am I doing wrong here? any help

Upvotes: 45

Views: 58932

Answers (4)

Ahmad Syarif
Ahmad Syarif

Reputation: 57

In case you want to import the breakpoint function of bootstrap into a single component's scss, you can do it like this

@import '~bootstrap/scss/bootstrap-grid.scss';
@include media-breakpoint-up(md) {
    //do something here
}

Upvotes: 1

Dylan Moguilevsky
Dylan Moguilevsky

Reputation: 557

For those searching an updated answer for Angular 13 with Angular CLI: 13.1.2 you will need to add in your angular.json file:

In the "architect" --> "build" --> inside "options":

"stylePreprocessorOptions": {
              "includePaths": [
                "src/styles"
              ]
            }

The final result will be something like:

"architect": {
        "build": {
          "builder": "@angular-devkit/build-angular:browser",
          "options": {
            "outputPath": "dist/proyect",
            "index": "src/index.html",
            "main": "src/main.ts",
            "polyfills": "src/polyfills.ts",
            "tsConfig": "tsconfig.app.json",
            "assets": [
              "src/favicon.ico",
              "src/assets"
            ],
            "styles": [
              "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css",
              "src/styles.scss"
            ],
            "scripts": [],
            "stylePreprocessorOptions": {
              "includePaths": [
                "src/styles"
              ]
            }
          },

Example for a structure like:

|- src/
    |- styles /
        |- _variables.scss
        |- _mixins.scss
        |- styles.scss

Then in your component just use:

@import "mixins";

Upvotes: 4

Hot Zellah
Hot Zellah

Reputation: 1081

In the new angular v6, importing sass files is a little different from the previous version.

I just needed to import like this (in a component stylesheet)

@import "~src/sass/variables";    // note: without file extension

Now everything works fine

Thanks all for the help

Upvotes: 43

Andy Braham
Andy Braham

Reputation: 10161

I realize this is an older question, but keeps coming up in searches so I figure an update is in order. There is a way to define your own import paths for SASS like node_modules libraries, all you need to do is make a stylePreprocessorOptions entry in the options section of the angular.json file. You do not need to include everything using src\sass

angular.json

"options": {
  "outputPath": "dist/App",
  "index": "src/index.html",
  "main": "src/main.ts",
  "polyfills": "src/polyfills.ts",
  "tsConfig": "src/tsconfig.app.json",
  "assets": [
    "src/favicon.ico",
    "src/assets"
  ],
  "styles": [
    "src/sass/styles.scss"
  ],
  "stylePreprocessorOptions": {
    "includePaths": [
      "src/sass"
    ]
  },
  "scripts": []
},

Then in your styles you can simply import them using

styles.sass

Note: Don't include the file extension or an initial ~.

@import 'variables'; // Imports from src/sass
@import 'mixins;

Upvotes: 71

Related Questions