Angular-cli z css do scss

140

Przeczytałem dokumentację , która mówi, że jeśli chcę użyć, scssmuszę uruchomić następujące polecenie:

ng set defaults.styleExt scss

Ale kiedy to robię i tworzę ten plik, nadal pojawia się ten błąd w mojej konsoli:

styles.bundle.js:33Uncaught Error: Module build failed: Error: ENOENT:
no such file or directory, open
'/Users/Egen/Code/angular/src/styles.css'(…)
Jamie
źródło
1
To zadziała tylko dla plików, które wygenerujesz od tego momentu, nie sądzę, że naprawi te, które już masz. Jeśli git diffzobaczysz, co się zmieniło.
jonrsharpe
Ale nie mam jeszcze plików. Po prostu chcę się przełączyć.
Jamie
jak nie masz jeszcze plików? Jeśli tworzysz nowy projekt, dlaczego konfigurujesz go w ten sposób?
jonrsharpe
Zaczynam od angular2. Próbuję to wszystko rozgryźć.
Jamie
1
Jeśli tworzysz nowy projekt, wykonaj czynności ng new whatever --style=scss opisane w dokumentacji . Nie postępuj zgodnie z instrukcjami konfigurowania istniejącego projektu, jeśli to nie jest to, co robisz!
jonrsharpe

Odpowiedzi:

277

W przypadku Angular 6 sprawdź oficjalną dokumentację

Uwaga: w przypadku @angular/cliwersji starszych niż 6.0.0-beta.6użycie ng setzamiast ng config.

W przypadku istniejących projektów

W istniejącym projekcie angular-cli, który został skonfigurowany z domyślnymi cssstylami, będziesz musiał zrobić kilka rzeczy:

  1. Zmień domyślne rozszerzenie stylu na scss

Zmień ręcznie .angular-cli.json(Angular 5.x i starsze) lub angular.json(Angular 6+) lub uruchom:

ng config defaults.styleExt=scss

jeśli pojawi się błąd: Value cannot be found.użyj polecenia:

ng config schematics.@schematics/angular:component.styleext scss

(* źródło: opcje Angular CLI SASS )

  1. Zmień nazwę istniejących .cssplików na .scss(np. Styles.css i app / app.component.css)

  2. Wskaż CLI, aby znaleźć style.scss

Ręcznie zmień rozszerzenia plików apps[0].styleswangular.json

  1. Wskaż komponenty, aby znaleźć nowe pliki stylów

Zmień styleUrlsw komponentach, aby pasowały do ​​nowych nazw plików

Do przyszłych projektów

Jak wspomniał @Serginho, możesz ustawić rozszerzenie stylu podczas uruchamiania ng newpolecenia

ng new your-project-name --style=scss

Jeśli chcesz ustawić wartość domyślną dla wszystkich tworzonych projektów w przyszłości, uruchom następujące polecenie:

ng config --global defaults.styleExt=scss
Szyk
źródło
6
EDYCJA: Po prostu musiałem odświeżyć kreatora w czasie rzeczywistym. Działa poprawnie
Cristian Traìna
1
@ angular / cli 1.7.3: zmiana defaults.styleExt z cssna scssin .angular-cli.jsonspowoduje automatyczne utworzenie plików scss dla każdego nowego komponentu wygenerowanego w przyszłości.
SimonHawesome
4
ng set defaults.styleExt scss dla istniejących projektów
smedasn Kwietnia
9
dla angular
hamilton.lima
22
@chovy dla najnowszej wersji angular cli, w moim przypadku (6.0.7) użyj tego polecenia dla istniejących projektów: ng config schematics.@schematics/angular:component.styleext scss jak powiedział @ hamilton.lima
Farhan
55

Począwszy od ng6 można to osiągnąć za pomocą następującego kodu dodanego angular.jsonna poziomie głównym:

Zmień ręcznie .angular.json:

"schematics": {
  "@schematics/angular:component": {
    "styleext": "scss"
  }
}
Jose Orihuela
źródło
Nie mam schematicsna poziomie głównym, ale zagnieżdżono w moim projekcie w angular.json. Czy powinienem to zignorować i zamiast tego dodać to na poziomie głównym?
mcheah
1
@mcheah, tak, tak też jest skonfigurowany mój i działa.
Eric Soyke
Zostawiłem moje zagnieżdżone w projekcie i wygląda na to, że to też działa dobrze, tak jak FYI dla każdego, kto ma to samo pytanie.
mcheah
Po aktualizacji do najnowszych wersji ng6 mój schematicsjest teraz zagnieżdżony.
Jose Orihuela
To chyba niczego nie zmienia. Nadal nie przetwarza reguł scss w plikach .css.
chovy
36

Otwórz plik angular.json

1. zmiana z

"schematics": {}

do

"schematics": {
           "@schematics/angular:component": {
                   "styleext": "scss"       
             }  
  }
  1. zmienić z (w dwóch miejscach)

"src/styles.css"

do

"src/styles.scss"

następnie sprawdź i zmień nazwy wszystkich .cssplików i zaktualizuj pliki component.ts styleUrls z.css to .scss

BALA
źródło
4
Krok 1 można wykonać z CLI: ng config schematics.@schematics/angular:component.styleext scss jak określono w oficjalnych dokumentach: github.com/angular/angular-cli/wiki/stories-css-preprocessors
Marian07
13

Dla Angular 6,

ng config schematics.@schematics/angular:component.styleext scss

uwaga: @ schemics / angular to domyślny schemat dla Angular CLI

Franklin Pious
źródło
11

Integracja preprocesora CSS dla Angular CLI: 6.0.3

Podczas generowania nowego projektu możesz również określić, które rozszerzenie chcesz dla plików stylów:

ng new sassy-project --style=sass

Lub ustaw domyślny styl w istniejącym projekcie:

ng config schematics.@schematics/angular:component.styleext scss

Dokumentacja Angular CLI dla wszystkich głównych preprocesorów CSS

Angel Roma
źródło
1
Invalid JSON character: "s" at 0:0.
chovy
Jak kątowego CLI 6.0.8 ng config(jak wyżej) jest najlepszą metodą, ale nadal trzeba zmieniać nazwy *.cssplików do *.scssi zastąpić odniesienia w angular.jsoncelu style.cssz style.scssI zaktualizować wszystkie składowe referencje plików w styleUrlsnieruchomości z nowymi nazwami. ... to działa świetnie!
gkl
8

W przypadku istniejących projektów :

W angular.jsonpliku

  1. W buildczęści, w testczęści, należy wymienić:

    "styles": ["src/styles.css"], przez "styles": ["src/styles.scss"],

  2. Zastąpić:

    "schematics": {}, przez "schematics": { "@schematics/angular:component": { "style": "scss" } },

Użycie ng config schematics.@schematics/angular:component.styleext scsspolecenia działa, ale nie powoduje umieszczenia konfiguracji w tym samym miejscu.

W projekcie zmień nazwy .cssplików na.scss

W przypadku nowego projektu to polecenie wykonuje całą pracę:

ng n project-name --style=scss

Do konfiguracji globalnej

Wydaje się, że nowe wersje nie mają polecenia globalnego

veben
źródło
6

Użyj polecenia:

ng config schematics.@schematics/angular:component.styleext scss
himanshu sharma
źródło
6

W najnowszej wersji Angular (v9) poniższy kod musi zostać dodany angular.json

  "schematics": {
    "@schematics/angular:component": {
      "style": "scss"
    }
  }

Można dodać za pomocą następującego polecenia:

ng config schematics.@schematics/angular:component.style scss
Partha Ranjan
źródło
nie działa dla mnie i próbuję to zrobić po 10
Kross
Angular 10 tutaj działa. Zauważ różnicę "styleext"i "style"w tej odpowiedzi
Pierre
3

W ng6 musisz użyć tego polecenia, według podobnego postu :

ng config schematics.@schematics/angular:component '{ styleext: "scss"}'
Jameson Saunders
źródło
3

Dla użytkowników rozszerzeń Nrwl, którzy natkną się na ten wątek: wszystkie polecenia są przechwytywane przez Nx (np. ng generate component myCompent), A następnie przekazywane do AngularCLI.

Polecenie, aby SCSS działało w obszarze roboczym Nx:

ng config schematics.@nrwl/schematics:component.styleext scss

tilo
źródło
Świetnie, szukałem tego. Dziękuję Ci!
Ruan Petersen
2

Można zastosować brutalną zmianę siły. To zadziała, aby się zmienić, ale to dłuższy proces.

Przejdź do folderu aplikacji src / app

  1. Otwórz ten plik: app.component.ts

  2. Zmień ten kod styleUrls: ['./app.component.css']nastyleUrls: ['./app.component.scss']

  3. Zapisz i zamknij.

W tym samym folderze src / app

  1. Zmień nazwę rozszerzenia pliku app.component.css na (app.component.scss)

  2. Postępuj zgodnie z tą zmianą dla wszystkich pozostałych składników. (np. dom, informacje, kontakt itp.)

Angular.json plik konfiguracyjny znajduje się obok. Znajduje się w katalogu głównym projektu.

  1. Wyszukaj i zamień css zmień go na (scss) .

  2. Zapisz i zamknij.

Na koniec uruchom ponownie ng serve -o.

Jeśli kompilator narzeka na ciebie, powtórz kroki.

Upewnij się, że postępujesz zgodnie z instrukcjami w app / src .

Frank Thoeny
źródło