gpt4 book ai didi

gruntjs - 在 Yeoman 的 Angular 项目中使用 Font Awesome SCSS 的正确方法

转载 作者:行者123 更新时间:2023-12-04 20:01:39 26 4
gpt4 key购买 nike

我使用 Yeoman 的生成器创建了一个 Angular 项目,现在我正在尝试将 Font Awesome 添加到项目中。我使用 Bower 安装了它

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 -->

但我不想将它用作 CSS,而是用作 SCSS 导入 (能够更改字体文件的 URL)。所以我从 HTML 页面中删除了上面的代码,并将正确的代码添加到 app/styles/main.scss :
$icon-font-path: "../bower_components/bootstrap-sass-official/assets/fonts/bootstrap/";
$fa-font-path: "../bower_components/fontawesome/fonts/"; // <==== here

// bower:scss
@import "bootstrap-sass-official/assets/stylesheets/_bootstrap.scss";
@import "fontawesome/scss/font-awesome.scss"; // <==== and here
// endbower

然后我运行 grunt build ,但是有些东西(Grunt?)将我的文件编辑回原始文件。 index.html得到了 <link>再次和我的 main.scss仅与 Bootstrap 导入一起保留。

好的,我们快到了。

所以我查看了 Bootstrap 的 bower.json并与 Font 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 Awesome 的 bower 配置,并在其中添加以下代码
"overrides": {
"fontawesome": {
"main": [
"./scss/font-awesome.scss", // now it's SCSS
"./fonts/*"
]
}
}

问题 :这是将 Font Awesome 用作 SCSS 导入并避免 Grunt 在构建项目时更改我的文件的正确方法吗?通过覆盖其默认值 "main"属性(property)?

最佳答案

从您的问题来看,我认为您可能是 Web 前端构建过程的新手。不幸的是,它有时会让人头疼。

首先,请注意 SCSS != CSS 和浏览器不知道如何使用 SCSS。其中<link rel="stylesheet" href="main.scss">在您的 HTML <head>标签将不起作用。我们可以在开发过程中享受 SCSS 的各种好处(例如变量、导入等),但要在浏览器中使用这些样式,我们必须 转译 SCSS 到 CSS(浏览器识别)。

为了使开发人员的生活更轻松,种子项目(例如您正在使用的项目)通常包含某种自动构建过程,其中包括将 SCSS 转换为 CSS。构建过程通常通过任务运行程序执行,例如 Grunt 或 Gulp。这些种子项目/模板通常还包括将项目的依赖项(如您在 bower.json 文件中声明的)注入(inject)您的 index.html 的任务。自动地。一个名为 wiredep 的工具用于阅读您的bower.json文件来确定这些依赖关系,特别是,它会寻找'main'属性来确定特定包需要哪些文件。然后它将注入(inject)适当的<script/><link>标签。

为了进一步解释这一点,当你执行 bower -install font-aweseome --save发生了一些事情:

  • 该包被下载并添加到您的项目中(通常添加到 bower_components/ )。
  • 一个条目被添加到您的 bower.json文件将包添加到项目的依赖项中。

  • 每个包都包含自己的 bower.json描述其各种属性的文件,其中最重要的(在名称之后)是 main .你可以看到 font-awesome bower.json文件 here .如您所见,它是 main属性引用了几个文件。这些是 wiredep 的文件用于确定 <script/><link>标签注入(inject)你的 index.html .

    通过在 中指定覆盖项目 bower.json像这样:
    "overrides": {
    "fontawesome": {
    "main": [
    "./scss/font-awesome.scss", // now it's SCSS
    "./fonts/*"
    ]
    }
    }

    您指定到 wiredep./scss/font-awesome.scss./fonts/*是您的项目所需的文件,请忽略 font-awesome 中列出的文件bower.json 文件。

    关于 SCSS:看看 Sass guide ,特别是关于进口的部分。萨斯 @import允许您将样式拆分为几个较小的 SCSS 文件(部分),这些文件在转换时被组合并包含在单个(可选缩小)CSS 文件中。这包括 任何第三方 SCSS 导入到 main.scss 中的文件.例如,如果您导入了 font-awesome.scss进入您的 main.scss文件,然后将其转换为 CSS,生成的 CSS 文件将包含 font-awesome.scss 中包含的所有样式.

    要包含和自定义第三方 SCSS 文件,我要做的是:
  • 在我自己的自定义中指定导入 main.scss文件。
  • 对我想要的变量进行任何自定义。
  • 转译main.scss进入 CSS。
  • 包括 <link>标记到我的 index.html 中的转译 CSS 文件文件。
  • 关于gruntjs - 在 Yeoman 的 Angular 项目中使用 Font Awesome SCSS 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28966069/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com