Gruntjs 在Yeoman';s角项目
我使用Yeoman的生成器创建了一个Angular项目,现在我正在尝试将字体添加到项目中。我安装它使用鲍尔使用Gruntjs 在Yeoman';s角项目,gruntjs,bower,font-awesome,Gruntjs,Bower,Font Awesome,我使用Yeoman的生成器创建了一个Angular项目,现在我正在尝试将字体添加到项目中。我安装它使用鲍尔使用 bower install fontawesome --save 然后它会自动将以下代码添加到我的app/index.html: <!-- build:css(.) styles/vendor.css --> <!-- bower:css --> <link rel="stylesheet" href="bower_components/fontawes
bower install fontawesome --save
然后它会自动将以下代码添加到我的app/index.html
:
<!-- build:css(.) styles/vendor.css -->
<!-- bower:css -->
<link rel="stylesheet" href="bower_components/fontawesome/css/font-awesome.css" />
<!-- endbower -->
<!-- endbuild -->
然后我运行grunt build
,但是有东西(grunt?)将我的文件编辑回了原始文件。index.html
再次获得了
,而我的main.scss
仅在引导导入时保留
好的,我们快到了
因此,我查看了Bootstrap的bower.json
,并将其与字体Awesome的bower.json
进行了比较,发现了以下区别:
// Bootstrap
"main": [
"assets/stylesheets/_bootstrap.scss", // it's SCSS
...
],
// Font Awesome
"main": [
"./css/font-awesome.css", // it's CSS
...
],
然后,我找到了一种方法,可以使用我的应用程序的bower.json
正确(不确定)覆盖Font Aewome的bower配置,并在其中添加了以下代码
"overrides": {
"fontawesome": {
"main": [
"./scss/font-awesome.scss", // now it's SCSS
"./fonts/*"
]
}
}
问题:这是将Font Awesome用作SCSS导入并避免在构建项目时更改文件的正确方法吗?通过覆盖其默认的
“main”
属性?根据您的问题判断,我认为您可能是web前端构建过程的新手。不幸的是,它有时会令人头痛
首先,请注意,SCSS!=CSS和浏览器不知道如何使用SCS。在HTML
标记中包含
将不起作用。在开发过程中,我们可以享受SCS的各种好处(例如变量、导入等),但要在浏览器中使用这些样式,我们必须将SCS转换为CSS(浏览器可以识别)
为了让开发人员的生活更轻松,种子项目(例如您正在使用的项目)通常包括某种自动构建过程,其中包括将SCS转换为CSS。构建过程通常通过任务运行程序(如Grunt或Gulp)执行。这些种子项目/模板通常还包括一项任务,用于将项目的依赖项(如bower.json文件中声明的)自动注入index.html
。名为wiredep
的工具用于读取bower.json
文件以确定这些依赖关系,特别是,它将查找“main”属性以确定特定包需要哪些文件。然后,它将注入相应的
和
标记
为了进一步解释这一点,当您执行bower-install font-aweseome--save
时,会发生一些事情:
bower\u components/
)李>
bower.json
文件中,将包添加到项目的依赖项中bower.json
文件,该文件描述了它的各种属性,其中最重要的属性(在名称之后)是main
。您可以看到font-awesome
bower.json
文件。如您所见,它的main
属性引用了多个文件。这些文件是wiredep
用于确定要将哪些
和
标记插入index.html
的文件
通过在项目的bower.json
中指定覆盖,如下所示:
"overrides": {
"fontawesome": {
"main": [
"./scss/font-awesome.scss", // now it's SCSS
"./fonts/*"
]
}
}
您正在向wiredep
指定/scss/font awesome.scss
和/font/*
是项目所需的文件,并忽略font awesome
bower.json文件中列出的文件
关于SCS:看看Sass,特别是关于进口的部分。Sass@import
允许您将样式拆分为几个较小的SCSS文件(部分),这些文件在传输时被合并并包含到单个(可选缩小)CSS文件中。这包括导入到main.SCSS
中的任何第三方SCSS文件。例如,如果将font awesome.scss
导入到main.scss
文件中,然后将其转换为CSS,则生成的CSS文件将包含font awesome.scss
中包含的所有样式
要包括和自定义第三方SCSS文件,我要做的是:
main.scss
文件中指定导入index.html
文件中,将
标记包含到传输的CSS文件中谢谢你的回答,布莱克!实际上,我使用SCSS已经有一段时间了,但这是我第一个使用Bower和Grunt等工具的项目。也许我的问题还不够清楚,但问题是:我在项目的
bower.json
中覆盖属性是否正确?因为我不想单独导入他们的CSS文件,所以我想(现在我正在这么做)生成一个CSS文件,其中包括Bootstrap、fontsawesome和项目需要的任何其他内容。我问这个是因为看起来不对。初学者的恐惧可能:-)
"overrides": {
"fontawesome": {
"main": [
"./scss/font-awesome.scss", // now it's SCSS
"./fonts/*"
]
}
}