Skip to content

Instantly share code, notes, and snippets.

@paulwellnerbou
Last active January 17, 2019 18:38
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save paulwellnerbou/fd6e81bad2e6975d2805 to your computer and use it in GitHub Desktop.
Save paulwellnerbou/fd6e81bad2e6975d2805 to your computer and use it in GitHub Desktop.
Function for SASS/SCSS to avoid duplicate imports and redundant generated CSS. See http://paul.wellnerbou.de/2015/05/18/avoid-multiple-imports-of-the-same-scss-file-with-sass/ for more details.
/* If this function is imported, you can import scss files using:
@if not-imported("your-file") { @import "your-file"; }
*/
$imported-once-files: () !default;
@function not-imported($name) {
$imported-once-files: $imported-once-files !global;
$module_index: index($imported-once-files, $name);
@if (($module_index == null) or ($module_index == false)) {
$imported-once-files: append($imported-once-files, $name);
@return true;
}
@return false;
}
@greaveselliott
Copy link

Great idea - unfortunately, this doesn't quite work for me. I run into the following error:
"Import directives may not be used within control directives or mixins. " any idea's?

@cscuderi
Copy link

I get the same issue as greaveselliott above.

@hcomnetworkers
Copy link

This code does no longer work.
You may want to use:

$imported-once-files: () !default;

@function not-imported($name) {
  $module_index: index($imported-once-files, $name);
  @if (($module_index == null) or ($module_index == false)) {
    $imported-once-files: append($imported-once-files, $name) !global;
    @return true;
  }
  @return false;
}

@mritzman-dg
Copy link

I'm also getting the same error as well

ERROR in ./src/sass/index.scss
Module build failed (from ./node_modules/mini-css-extract-plugin/dist/loader.js):
ModuleBuildError: Module build failed (from ./node_modules/sass-loader/lib/loader.js):

@if not-imported("helpers/import-once-workaround") { @import "helpers/import-once-workaround"; }
                                                    ^
      Import directives may not be used within control directives or mixins.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment