How to configure webpack to use compass in my project

后端 未结 3 1950
忘了有多久
忘了有多久 2021-02-19 23:24

I\'m new in webpack and i don\'t know how we can use Compass ( CSS Authoring Framework ) in a project.

Is there a good method ?

Thanks

相关标签:
3条回答
  • 2021-02-20 00:00

    Since compass is a half-ruby and a half-sass framework, compass-mixins may work incorrectly whith legacy scss code.

    To enable the original compass in your webpack config, you should use:

    ruby-sass-loader

    with the compass option.

    module.exports = {
      // ...    
      module: {
        loaders: [
          /* some other loaders */
          {
            test: /\.scss$/,
            loader: 'style!css!ruby-sass?compass=1'
          }
        ]
      }
    };
    

    NB!: Compass is no longer supported

    0 讨论(0)
  • 2021-02-20 00:04

    Essential addition to @Ayman Jitan answer https://stackoverflow.com/a/34967698/1114926.

    You have to add these two lines at top of your styles.scss file:

    @import "compass";  // <--
    @import "compass/functions";  // <--
    
    .foo {
        min-height: 100px;
        background-color: #fff;
    }
    

    Otherwise you'll get errors from sass-loader "Module build failed" and "No mixin" found. Like the following"

    Module build failed:
    undefined
                    ^
          No mixin named background
    

    If you add only @import "compass/functions"; (without @import "compass";), you may get this error (depends on the mixin you include, in my case it was thrown by @include background(linear-gradient(white, #cccccc, #aaaaaa));):

    Module build failed:
    undefined
                              ^
          Media query expression must begin with '('
    
    0 讨论(0)
  • 2021-02-20 00:10

    you can use compass-mixins

    var path = require('path');
    module.exports = {
      ...
      module: {
        loaders: [
          {
            test: /\.scss$/,
            loader: "style!css!sass?includePaths[]=" + path.resolve(__dirname, "./node_modules/compass-mixins/lib")
          }
        ]
      }
    };
    

    here is a helpful webpack boilerplate


    Update:

    You can use sass-resources-loader that will @import your SASS resources into every required SASS module. where you will never have to import your resources in all your sass files.

    module.exports = {
      ...,
      module: {
        loaders: [
          ...,
          {
            test: /\.scss$/,
            loaders: [
              'style',
              'css',
              'sass?outputStyle=expanded&includePaths[]=' + path.resolve(__dirname, './node_modules/compass-mixins/lib'),
              'sass-resources'
            ]
          }
        ]
      },
      sassResources: path.resolve(__dirname, './client/app/resources/stylesheets/base.scss')
    

    please check the implementation in action in this boilerplate

    0 讨论(0)
提交回复
热议问题