Ошибка сборки функционального модуля в Angular 2, связанная с файлом scss, объявленным в массиве styleUrls

#angular #webpack #webpack-style-loader #ng-modules

#angular #webpack #webpack-style-loader #ng-modules

Вопрос:

Это NgModule моего функционального модуля:

 @NgModule({
    imports: [
        CommonModule,
        FormsModule,
        ReactiveFormsModule
    ],
    declarations: [
        CustomCardComponent,
        StyledDirective
    ],
    exports: [CustomCardComponent]
})

export class CustomCardModule {}
  

Внутри компонента:

 import {Component, OnInit, Input} from '@angular/core';
others imports

@Component({
    selector: 'my-custom-card',
    templateUrl: './custom-card.component.html',
    styleUrls: ['./custom-card.component.scss']
})

export class CustomCardComponent implements OnInit { ... }
  

Ошибка связана с файлом .scss, который я объявляю с помощью массива styleUrls, если я удалю его, компонент заработает, с другой стороны, я получаю эту ошибку:

 /~/css-loader?sourceMap!./~/postcss-loader!./~/sass-loader!./~/raw-loader!./~/postcss-loader!./~/sass-loader!./src/myModules/custom-card-fmodule/custom-card.component.scss
Module build failed: 
$cardWidth: 220px;
             ^
      Invalid CSS after "module.exports": expected "{", was '= ".panel-default >'
      in /Users/MyName/Development/Angular2/signup-app/src/myModules/custom-card-fmodule/custom-card.component.scss (line 1, column 15)
Error: 
$cardWidth: 220px;
             ^
      Invalid CSS after "module.exports": expected "{", was '= ".panel-default >'
      in /Users/MyName/Development/Angular2/signup-app/src/myModules/custom-card-fmodule/custom-card.component.scss (line 1, column 15)
    at options.error (/Users/MyName/Development/Angular2/signup-app/node_modules/node-sass/lib/index.js:292:26)
 @ ./src/myModules/custom-card-fmodule/custom-card.component.scss 4:14-339
  

но в файле .scss нет никакой ошибки, и это происходит только для моего пользовательского модуля, он отлично работает для всех других компонентов (которые не являются функциональными модулями)

Ответ №1:

Вам нужен загрузчик sass по этой ссылке: https://github.com/AngularClass/angular2-webpack-starter/wiki/How-to-include-SCSS-in-components

         Command line inside project folder where your existing package.json is:
            npm install node-sass sass-loader raw-loader --save-dev

    In webpack.common.js, search for "rules:" and add this object to the end of the rules array (don't forget to add a comma to the end of the previous object):


    {
      test: /.scss$/,
      exclude: /node_modules/,
      loaders: ['raw-loader', 'sass-loader'] // sass-loader not scss-loader
    }