将 SCSS 与 Angular 2/4 一起使用的架构

Posted

技术标签:

【中文标题】将 SCSS 与 Angular 2/4 一起使用的架构【英文标题】:Architecture for using SCSS with Angular 2/4 【发布时间】:2017-11-26 15:30:24 【问题描述】:

我正在尝试设置一个架构,以便在我的 angular 4 项目中使用SCSS,而不是普通的CSS。到目前为止,我一直遵循 Angular Style guide 将 CSS 安排在与组件 ts 文件相邻的位置,每个组件都有一个单独的目录,就像遵循功能优先的方法一样。

由于现在我开始使用SCSS,我简单地将我的CSS 文件替换为SCSS 文件。但我不明白,我应该把我的_variables.scss_mixins.scss 和常见的styles.scss 文件放在哪里,这样变量总是最先加载,这样变量依赖关系就可以在@987654333 中解决@ 文件。

我正在使用 webpack 编译我的 SCSS 文件。

webpack.config.js

module: 
    rules: [
        
            test: /\.ts$/,
            loaders: ['awesome-typescript-loader', 'angular2-template-loader']
        ,
        
            test: /\.html$/,
            loader: 'html-loader'
        ,
        
            test: /\.(png|jpe?g|gif|svg|woff|woff2|ttf|eot|ico)$/,
            loader: 'file-loader?name=assets/[name].[ext]'
        ,
        
           test: /\.scss$/,
           use: [
                 loader: "style-loader" ,
                 loader: "css-loader" ,
                 loader: "sass-loader" 
            ]
        
    ]

由于我不太擅长设计和构建应用程序,因此非常感谢任何帮助。

【问题讨论】:

你有几个选择。我们使用 bootstrap 和 sass。您需要将 sass bootstrap 包包含到您的项目中。参考:github.com/AngularClass/angular-starter/wiki/… 您知道不包括引导程序或其他样式库的任何方法吗?我的项目要求我为 Angular 小部件库构建自己的 CSS 框架,并尽可能减少空间。 你可以参考这个帖子:***.com/questions/42433995/using-sass-in-angular-2 仅供参考:tsscss 加载器已经内置在 Webpack 2.x 中 @deezg 我不仅想使用局部组件变量,还想在整个 Web 应用程序中使用全局变量。对于ex-$colorPrimary$colorAccent,你提到的帖子只展示了如何使用局部变量。 【参考方案1】:

如果你想要一些通用的样式代码,并且你已经在使用 Webpack, 然后您可以简单地将常用样式导入您的主模块。 例如:

目录结构

/src
  /app
    app.component.html
    app.component.ts
    app.component.scss
  /styles
    _mixins.scss
    _variables.scss
    common.scss
  app.module.ts
  main.ts

在你的 app.module.ts 文件中你可以import './styles/common.scss', 这将基本上将你所有的 mixins 和这些导入到 它。您的 app.component.scss 文件可能需要导入“../styles/variables” 或许还有一些 mixin。

拥有通用样式表的另一个选择是简单地导入 需要时将它们放入组件 *.scss 文件而不是 一下子把他们都带进来。这可能会阻止您导入 你真的不需要的部分。

【讨论】:

我按照你的要求做了。我已使用styleUrls: []AppComponent 中导入了variables.scss 内的app.component.scssapp.component.scss 文件。但仍然在其他组件SCSS 内部,变量没有得到解决。【参考方案2】:

有人开发了一个 seed 角度应用程序,考虑了 SASS 和完美的架构以及人们可能需要的所有其他东西。

尽情探索吧。这对我来说很神奇。

Angular Library Seed

【讨论】:

以上是关于将 SCSS 与 Angular 2/4 一起使用的架构的主要内容,如果未能解决你的问题,请参考以下文章

将 Storybook/vue 与 SCSS 一起使用

如何将 svelte :global() 与 sass/scss 一起使用?

将 .ts 中的变量导入 .scss angular

以角度2将所有css文件转换为scss

@storybook/angular 无法在故事索引上加载 scss 文件

为啥 CSS 变量不能与 SCSS 变量一起使用