scss - 不推荐在导入中使用“~” - Angular - vscode

Pie*_*jan 39 sass visual-studio-code angular

从 Angular 13 开始,使用波形符 ( ~) 从node_modules

关闭.组件.scss

:host ::ng-deep {
    // Configuration
    @import "~bootstrap/scss/functions";
    @import "~bootstrap/scss/variables";
    @import "~bootstrap/scss/mixins";

    // Layout & components
    @import "~bootstrap/scss/close";
}
Run Code Online (Sandbox Code Playgroud)

运行后会出现以下警告ng build

警告:'C:\repos\...\src\lib\components\close\close.component.scss' 导入带有波浪号的 '~bootstrap/scss/close'。不推荐在导入中使用“~”。

更改此设置并删除波形符很容易。ctrl但是,当单击 scss 路径时,VS Code 不再找到该文件 。它认为它位于

C:\repos\...\src\lib\components\close\bootstrap\scss\close
Run Code Online (Sandbox Code Playgroud)

我已经尝试过这个改变,但它没有改变任何东西。

有谁知道如何解决这一问题?

编辑

对于那些想知道为什么我们需要:host ::ng-deep围绕@import语句的人来说,它将样式范围限制在组件内。一个很好的例子是我使用的bs-list-group和 ,bs-list-group-item如下所示:

<bs-list-group>
    <bs-list-group-item>Cras justo odio</bs-list-group-item>
    <bs-list-group-item>Dapibus ac facilisis in</bs-list-group-item>
    <bs-list-group-item>Morbi leo risus</bs-list-group-item>
    <bs-list-group-item>Porta ac consectetur ac</bs-list-group-item>
    <bs-list-group-item>Vestibulum at eros</bs-list-group-item>
</bs-list-group>
Run Code Online (Sandbox Code Playgroud)

以下 scss 导入list-group.component.scss

// Configuration
@import "~bootstrap/scss/functions";
@import "~bootstrap/scss/variables";
@import "~bootstrap/scss/mixins";

// Layout & components
@import "~bootstrap/scss/list-group";
Run Code Online (Sandbox Code Playgroud)

结果如下

具有范围样式的 Bootstrap 列表视图

另一方面:

:host ::ng-deep {
    // Configuration
    @import "~bootstrap/scss/functions";
    @import "~bootstrap/scss/variables";
    @import "~bootstrap/scss/mixins";

    // Layout & components
    @import "~bootstrap/scss/list-group";
}
Run Code Online (Sandbox Code Playgroud)

其中ng-deep删除组件范围,并:host替换为属性 Angular 适用于BsListViewComponent(在本例中为[_nghost-bkg-c64])。这使得样式适用于整个BsListviewComponent,因为范围已从 css 选择器中删除。

带有剥离范围的 Bootstrap 列表视图

这实际上确实有效......

小智 49

  1. angular.json文件中

  2. 添加以下内容build -> options

"stylePreprocessorOptions": {
   // other options...
   "includePaths": [
     "./node_modules"
   ]
 }  
Run Code Online (Sandbox Code Playgroud)
  1. ~在每次导入时删除

请对这一警告持保留态度:明确使用node_modules/前缀可能会更好,特别是当多个人正在处理此项目时。

  • 在我的项目中,我还没有“stylePreprocessorOptions”设置,并且我不知道将其放在哪里。经过一番查看后,这应该进入“build”-&gt;“options”部分,在我的例子中,我将其直接放在“styles”条目下。 (19认同)
  • 是的,它应该直接进入“构建&gt;选项”。参考:https://angular.io/guide/workspace-config#style-preprocessor-options (2认同)
  • 如果你不想添加所有节点模块,你可以添加单独的路径,例如`~swiper/scss`,`~swiper/scss/autoplay`等,只需删除`"./node_modules"`并添加`“./node_modules/swiper”`。为您想要包含的每个包添加一个条目。 (2认同)

use*_*296 10

您必须替换为 css 的路径,例如:

@import node_modules/bootstrap/scss/mixins'  
Run Code Online (Sandbox Code Playgroud)

在此之前,我建议您继续要导入的引导文件并获取该文件的相对路径。

在您的 scss 文件中,将 ~ 路径替换为相对路径。

请注意路径中不要包含 .scss 文件。

  • 谢谢回复。这编译也很好,但它仍然不允许我 ctrl+单击路径(`@import "node_modules/bootstrap/scss/functions";`) (2认同)