Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I set a sass variable using an environment variable?

I'm using Gulp as my build system.

I need to identify links pointing to external websites with the scss following rule:

// Links to external websites
a[href*='//']:not([href*='example.com']) {
    &::after {
        content: ' \e895';
        font-family: 'Material Icons';
    }
}

OR

$baseURL: 'localhost:3000'; // Set this variable based on environment
a[href*='//']:not([href*='#{$baseurl}']) {
    ...
}

When I'm running a development server the address I'm serving files from is localhost:3000, not example.com. The result is that every single link on the website (on the dev server) has a small icon indicating the link goes to an external website, which is really distracting.

What's the best way to set a scss variable based on an environment setting?


Edit:
This solution works, but it introduces a temporary file, which I'm not wild about. I moved my _variables.scss into the scss root, I process this file and output it into the base subdirectory where it is used to compile the scss. I would then add scss/base/_variables.scss to my .gitignore to avoid committing to version control.

_variables.scss

$baseURL: '/* @echo PATH */';  

Gulpfile.js

// Set baseurl as Sass variable -- used to identify external links
gulp.task('sass-vars', function () {
  var baseURL = (config.production) ? 'example.com' : 'localhost:3000';
  return gulp.src('./scss/_variables.scss')
    .pipe($.preprocess({context: {PATH: baseURL}}))
    .pipe(gulp.dest('./scss/base'));
});
like image 508
Roy Avatar asked Nov 03 '15 20:11

Roy


People also ask

How do I declare a variable in Sass?

The basic syntax for defining a variable is simple: Just use a $ before the variable name and treat its definition like a CSS rule: Sass Variable Syntax: $<variable name>:<value>; The following declares a variable named large-font.

How do you pass an environment variable?

Environment variables can be used to pass configuration to an application when it is run. This is done by adding the definition of the environment variable to the deployment configuration for the application. To add a new environment variable use the oc set env command.

Can you use variables in SCSS?

Sass libraries often use !default variables to allow their users to configure the library's CSS. To load a module with configuration, write @use <url> with (<variable>: <value>, <variable>: <value>) . The configured values will override the variables' default values.

How do I change dynamic variables in SCSS?

SCSS is compiled to CSS during compile time, and SCSS variables are replaced with resolved value during compile time, which means there is no way to change the variable during run time. However, CSS variables just sits there during run time, and you can dynamically CRUD them during run time with JavaScript (Web API).


1 Answers

Yes, it is possible to do that.

To get environment variables there's a package: gulp-env

To remove these links from static files: gulp-preprocess

But it's also important to check these changed files, not to commit them as a development version. Hooks to your VCS is an option.

like image 109
sobolevn Avatar answered Sep 30 '22 17:09

sobolevn