Angular-cli从css到scss

Jam*_*mie 106 css sass angular-cli angular angular6

我已经阅读了文档,其中说如果我想使用,scss我必须运行以下命令:

ng set defaults.styleExt scss
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做并生成该文件时,我仍然在我的控制台中收到此错误:

ng set defaults.styleExt scss
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

Chi*_*hic 222

对于Angular 6,请查看官方文档

注意:对于@angular/cli早于6.0.0-beta.6使用的版本ng set代替ng config.

对于现有项目

在使用默认css样式设置的现有angular-cli项目中,您需要执行以下操作:

  1. 将默认样式扩展名更改为 scss

手动更改.angular-cli.json(Angular 5.x及更早版本)或angular.json(Angular 6+)或运行:

ng config defaults.styleExt=scss
Run Code Online (Sandbox Code Playgroud)
  1. 将现有Value cannot be found.文件重命名为.css(即styles.css和app/app.component.css)

  2. 指向CLI以查找styles.scss

手动更改.scssangular.json中的文件扩展名

  1. 指向组件以查找新样式文件

更改apps[0].styles组件以匹配新文件名

对于未来的项目

正如@Serginho所提到的,您可以在运行styleUrls命令时设置样式扩展名

ng new your-project-name --style=scss
Run Code Online (Sandbox Code Playgroud)

如果要为将来创建的所有项目设置默认值,请运行以下命令:

ng config --global defaults.styleExt=scss
Run Code Online (Sandbox Code Playgroud)

  • 不适用于最新版本的@ angular/cli (35认同)
  • 使用 Angular 12,您将得到“数据路径“/schematics/@schematics~1angular:component”不能有其他属性(styleext)” - 使用“ng config Schematics.@schematics/angular:component.style scss”代替 (23认同)
  • @chovy用于最新的角度cli版本,在我的情况下(6.0.7)对现有项目使用此命令:`ng config schematics.@ schematics/angular:component.styleext scss`由@ hamilton.lima讲述 (22认同)
  • for angular 6关注此https://github.com/angular/angular-cli/wiki/stories-css-preprocessors (9认同)
  • 编辑:我只需要刷新实时构建器.它工作正常 (6认同)
  • ng为现有项目设置defaults.styleExt scss (4认同)
  • @angular/cli 1.7.3:在`.angular-cli.json` 中将defaults.styleExt 从`css` 更改为`scss` 将自动为将来生成的每个新组件创建scss 文件。 (2认同)

小智 51

从ng6开始,这可以通过angular.json在根级别添加以下代码来完成:

手动更改.angular.json:

"schematics": {
  "@schematics/angular:component": {
    "styleext": "scss"
  }
}
Run Code Online (Sandbox Code Playgroud)

  • @mcheah,是的,这也是我的设置方式,并且正在运行。 (2认同)

BAL*_*ALA 32

打开angular.json文件

改变

"schematics": {}

"schematics": {
           "@schematics/angular:component": {
                   "styleext": "scss"       
             }  
  }
Run Code Online (Sandbox Code Playgroud)
  1. 改变(在两个地方)

"src/styles.css"

"src/styles.scss"

然后检查并重命名所有.css文件并更新component.ts文件styleUrls.css to .scss

  • 第1步可以从CLI完成:`ng config schematics.@ schematics/angular:component.styleext scss`,如官方文档中所述:https://github.com/angular/angular-cli/wiki/stories-css-preprocessors (4认同)

小智 17

首先安装在您的项目中:

npm i --save-dev schematics-scss-migrate

在您的 Angular CLI 项目中:

运行以下命令:

ng g schematics-scss-migrate:scss-migrate

上面的命令将在使用项目中执行以下操作:

  1. 递归重命名src文件夹中的所有样式表。
  2. 更改相应组件类中的styleUrl,以指向样式表的新文件名。
  3. 更新angular.json文件中的组件样式原理图值,或者如果原理图不存在则创建一个值,并且
  4. 将angular.json文件中的所有styles.css引用重命名为styles.scss

我已经在我的 Angular 9 项目上尝试过这个方法,它有效...不需要额外的努力来重命名文件...只需输入命令即可!现在您的项目已迁移到 scss 项目。

参考: https: //www.npmjs.com/package/schematics-scss-migrate


Fra*_*ous 12

对于Angular 6,

ng config schematics.@schematics/angular:component.styleext scss
Run Code Online (Sandbox Code Playgroud)

注意:@ schematics/angular是Angular CLI的默认原理图


小智 11

Angular CLI的CSS预处理器集成:6.0.3

生成新项目时,您还可以定义样式文件所需的扩展名:

ng new sassy-project --style=sass
Run Code Online (Sandbox Code Playgroud)

或者在现有项目上设置默认样式:

ng config schematics.@schematics/angular:component.styleext scss
Run Code Online (Sandbox Code Playgroud)

所有主要CSS预处理器的Angular CLI文档


Par*_*jan 11

在最新版本的 Angular (v9) 中,需要添加以下代码 angular.json

  "schematics": {
    "@schematics/angular:component": {
      "style": "scss"
    }
  }
Run Code Online (Sandbox Code Playgroud)

可以使用以下命令添加:

ng config schematics.@schematics/angular:component.style scss
Run Code Online (Sandbox Code Playgroud)

  • Angular 10 在这里可以工作。请注意这个答案中“styleext”和“style”的区别 (3认同)

veb*_*ben 10

对于现有项目

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
Run Code Online (Sandbox Code Playgroud)

用于全局配置

新版本好像没有全局命令


mah*_*a k 7

执行迁移的一种快速而简单的方法是使用原理图 NPM 包schematics-scss-migrate。这个包将所有 css 文件重命名为 scss 文件:

ng add schematics-scss-migrate
Run Code Online (Sandbox Code Playgroud)

https://github.com/Teebo/scss-migrate#readme


sye*_*yed 6

手动更改“angular.json”中的以下代码,该代码位于文件末尾。

"schematics": {
    "@schematics/angular:component": {
      "style": "scss"
    }
  }
Run Code Online (Sandbox Code Playgroud)

请将文件从 .css 重命名为 .scss 并将所有引用更改为相同的


小智 5

使用命令:

ng config schematics.@schematics/angular:component.styleext scss
Run Code Online (Sandbox Code Playgroud)


Jan*_*ler 5

显然有不止一种方法可以做到这一点,但是通过最新版本的 Angular,我得到了另一个我想保留的原理图值。由于这个其他值,该命令ng config schematics.@schematics/angular:component.styleext scss对我来说失败了,所以我采用了新值并自己将其输入到 中angular.json。这是您必须输入的新值:

        "@schematics/angular:component": {
          "style": "scss"
        }
Run Code Online (Sandbox Code Playgroud)

angular.json最后看起来像这样:

{
  "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
  ...
  "projects": {
    "yourapp": {
      ...
      "schematics": {
        "@schematics/angular:application": {
          "strict": true
        },
        "@schematics/angular:component": {
          "style": "scss"
        }
...
Run Code Online (Sandbox Code Playgroud)

那么你必须

  • 将所有css文件重命名为scss
  • 将文件中的所有引用更改为这些。

您应该完成这些步骤。