0%

Angular项目从CSS迁移到SCSS

1. 前言

通常,当我们使用angular-cli启动应用程序时,默认情况下它将使用css,除非我们按以下方式创建项目。

1
ng new your_application --style=scss

但是当我们开发项目到一半的时候,突然有一天研究某些东西后发现使用scss比css好用多了,这个时候我们将面临一个大问题,怎么将当前项目的css全部转成scss进行以后的开发且置为默认项呢?别着急,往下看!

2. 第1步:更改步骤

如果你使用的是最新的angular-cli,那最好了,如果不是请检查当前的angular-cli版本是否大于6.0.7,如果以上都没有问题,那么OK,请使用以下命令更改配置。

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

这个时候你会看到脚本会在项目的angular.json文件中做了如下修改:

1
"schematics": {
2
    "@schematics/angular:component": {
3
    "styleext": "scss"
4
}

3. 第2步:重命名css文件

这个是头疼问题了,总不能挨个挨个修改吧,答案是拒绝的啦。如果您使用的是mac或linux,请从终端打开src文件夹,然后键入以下命令。

1
find . -name "*.css" -exec bash -c 'mv "$1" "${1%.css}".scss' - '{}' \;

ok!漂亮,现在你可以看下项目所有以.css后缀的文件全都重命名为.scss的后缀了!

==警告:请确保一定在项目src目录下打开终端,否则后果很严重!!!==

3. 更改所有引用

有一些文件是需要修改css文件的位置的,通常有以下这些:

  • xxx.component.ts文件中@Component装饰器里styleUrls的css文件路径。
  • 如果您引用bootstrap或font-awesome,则可以将导入其css文件的文件更改为.scss替代项。
  • 在你的angular.json文件中,可能会引用你的style.css文件,你必须将它们改为.scss,因为我们已经重命名了它。

完成了以上步骤之后(PS:如果你使用了font-awesome),则可能还会意外出现以下错误:

1
ERROR in ./src/styles.scss (./node_modules/raw-loader!./node_modules/postcss-loader/lib??embedded!./node_modules/sass-loader/lib/loader.js??ref--15-3!./src/styles.scss)
2
Module Error (from ./node_modules/postcss-loader/lib/index.js):
3
(Emitted value instead of an instance of Error) CssSyntaxError: /node_modules/font-awesome/scss/_path.scss:9:4: Can't resolve '../fonts/fontawesome-webfont.woff' in '/src'

好吧,这是我们不愿意看到的,在@importfont-awesome scss 之前添加以下行解决了这个问题。

1
$fa-font-path: "~font-awesome/fonts";