Angular-cli от css до scss


135

Я прочитал документацию , в которой говорится, что если я хочу использовать, scssмне нужно выполнить следующую команду:

ng set defaults.styleExt scss

Но когда я это делаю и создаю этот файл, я все равно получаю эту ошибку в консоли:

styles.bundle.js:33Uncaught Error: Module build failed: Error: ENOENT:
no such file or directory, open
'/Users/Egen/Code/angular/src/styles.css'(…)

1
Это будет работать только для файлов, которые вы создаете с этого момента, я не думаю, что это исправит те, которые у вас уже есть. Если вы git diffувидите, что это изменилось.
— jonrsharpe

Но у меня пока нет файлов. Просто хочу переключиться.
— Джейми

как у вас еще нет файлов? Если вы создаете новый проект, почему вы его так настраиваете?
— jonrsharpe

Просто начиная с angular2. Я пытаюсь во всем разобраться.
— Джейми

1
Если вы создаете новый проект, сделайте, ng new whatever --style=scss как показано в документации . Не следуйте инструкциям по настройке существующего проекта, если это не то, что вы делаете!
— jonrsharpe

Ответы:


267

Для Angular 6 проверьте официальную документацию

Примечание. Для @angular/cliверсий старше, чем 6.0.0-beta.6используется ng setвместо ng config.

Для существующих проектов

В существующем проекте angular-cli, который был настроен со cssстилями по умолчанию, вам нужно будет сделать несколько вещей:

  1. Измените расширение стиля по умолчанию на scss

Вручную измените .angular-cli.json(Angular 5.x и старше) или angular.json(Angular 6+) или запустите:

ng config defaults.styleExt=scss

если вы получили ошибку: Value cannot be found.используйте команду:

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

(* источник: параметры Angular CLI SASS )

  1. Переименуйте существующие .cssфайлы в .scss(например, styles.css и app / app.component.css)

  2. Направьте CLI, чтобы найти styles.scss

Вручную измените расширения файлов apps[0].stylesвangular.json

  1. Укажите компоненты, чтобы найти новые файлы стилей

Измените styleUrlsв ваших компонентах, чтобы они соответствовали вашим новым именам файлов

Для будущих проектов

Как упомянул @Serginho, вы можете установить расширение стиля при запуске ng newкоманды

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

Если вы хотите установить значение по умолчанию для всех проектов, которые вы создаете в будущем, выполните следующую команду:

ng config --global defaults.styleExt=scss

6
РЕДАКТИРОВАТЬ: Мне просто нужно было обновить конструктор в реальном времени. Он работает правильно
— Кристиан Трайна

1
@ angular / cli 1.7.3: изменение defaults.styleExt с cssна scssin .angular-cli.jsonавтоматически создаст файлы scss для каждого нового компонента, сгенерированного в будущем.
— SimonHawesome

4
ng set defaults.styleExt scss для существующих проектов
— smedasn

9
для angular 6 следуйте этому github.com/angular/angular-cli/wiki/stories-css-preprocessors
— hamilton.lima

22
@chovy для последней версии angular cli, в моем случае (6.0.7) используйте эту команду для существующих проектов: ng config schematics.@schematics/angular:component.styleext scss как сказал @ hamilton.lima
— Фархан

52

Начиная с ng6, это можно сделать с помощью следующего кода, добавленного angular.jsonна корневом уровне:

Вручную изменить .angular.json:

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

У меня schematicsнет корневого уровня, но он вложен в мой проект в angular.json. Должен ли я игнорировать это и вместо этого добавить это на корневой уровень?
— mcheah

1
@mcheah, да, мой тоже настроен, и он работает.
— Эрик Сойк

Я оставил свой вложенным в проект, и похоже, что он тоже отлично работает, как и к сведению всех, у кого есть тот же вопрос.
— mcheah

После обновления до последних версий ng6 мой schematicsтеперь тоже вложен.
— Хосе Ориуэла

Похоже, для меня это ничего не меняет. Все еще не обрабатываются правила scss в файлах .css.
— chovy

34

Откройте файл angular.json

1. изменить с

"schematics": {}

в

"schematics": {
           "@schematics/angular:component": {
                   "styleext": "scss"       
             }  
  }
  1. изменить с (в двух местах)

"src/styles.css"

в

"src/styles.scss"

затем проверьте и переименуйте все .cssфайлы и обновите файлы styleUrls component.ts из.css to .scss


4
Шаг 1 можно выполнить из интерфейса командной строки: ng config schematics.@schematics/angular:component.styleext scss как указано в официальных документах: github.com/angular/angular-cli/wiki/stories-css-preprocessors
— Marian07 01


11

Интеграция препроцессора CSS для Angular CLI: 6.0.3

При создании нового проекта вы также можете указать, какое расширение вы хотите для файлов стилей:

ng new sassy-project --style=sass

Или установите стиль по умолчанию для существующего проекта:

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

Документация Angular CLI для всех основных препроцессоров CSS


1
Invalid JSON character: "s" at 0:0.
— chovy

По угловому CLI 6.0.8 ng config(как указано выше) является лучшим методом , но вам все еще нужно переименовать *.cssфайлы *.scssи заменить ссылки на angular.jsonна style.cssс style.scssи обновить все ссылки на файлы компонентов в styleUrlsсобственности новых имен. ... тогда он отлично работает!
— gkl

8

Для существующих проектов :

В angular.jsonфайле

  1. В buildчасти и в testчасти, заменить:

    "styles": ["src/styles.css"], по "styles": ["src/styles.scss"],

  2. Заменить:

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

Использование ng config schematics.@schematics/angular:component.styleext scssкоманды работает, но не помещает конфигурацию в одно и то же место.

В своем проекте переименуйте .cssфайлы в.scss

Для нового проекта всю работу выполняет эта команда:

ng n project-name --style=scss

Для глобальной конфигурации

В новых версиях нет глобальной команды




3

Для пользователей расширений Nrwl, которые сталкиваются с этой веткой : все команды перехватываются Nx (например, ng generate component myCompent), а затем передаются в AngularCLI.

Команда для работы SCSS в рабочей области Nx:

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


Молодец, искал это. Спасибо!
— Руан Петерсен

2

Может быть применено изменение грубой силы. Это можно изменить, но это более длительный процесс.

Перейдите в папку приложения src / app

  1. Откройте этот файл: app.component.ts

  2. Измените этот код styleUrls: ['./app.component.css']наstyleUrls: ['./app.component.scss']

  3. Сохранить и закрыть.

В той же папке src / app

  1. Переименуйте расширение для файла app.component.css в (app.component.scss)

  2. Выполните это изменение для всех остальных компонентов. (например, дом, насчет, контакт и т. д.)

Далее следует файл конфигурации angular.json . Он находится в корне проекта.

  1. Найдите и замените CSS, измените его на (scss) .

  2. Сохранить и закрыть.

Наконец, перезапустите свой ng serve -o.

Если компилятор жалуется на вас, повторите действия еще раз.

Обязательно внимательно следуйте инструкциям в app / src .


1

В последней версии Angular (v9) код ниже необходимо добавить angular.json

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

Может быть добавлено с помощью следующей команды:

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

не работает для меня, и я пытаюсь сделать это более 10
— Кросс
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.