Install Sass locally

Downloading the project files

We’ve split our Sass into logical chunks using the 7-1 file system, making things easy to locate and maintain. But you can’t just hop onto your machine and start working; right now, the entire project is living in the cloud. So you need to open a browser, navigate, login in, and then load the project. And then you need to have an internet connection to continue working and saving your progress.

What if you wanted to work while you’re on a plane? Or when you have spotty wifi coverage? Or, have it on your machine for the sake it? To do that, you’d need to download all of the source files and install Sass locally, allowing you to recompile your Sass to CSS whenever you make changes.

There’s a slew of different ways to install Sass on your machine, but for the sake of simplicity, we’re only going to cover one. But first, you should transfer the files for the site onto your machine so thatĀ you have something to work with.

Once the files have been downloaded, extract them to the directory where you’d like your project directory to live. In my case, I have a directory titled Ā openclassrooms-coursesĀ  where I’ve extracted myĀ writing-sassĀ project to. All of the files for our site are located inside of the Ā writing-sassĀ  directory.

Fire up VS Code and open the project directory, via the ā€œOpen Folderā€ option of the file menu:

Open that folder!

After navigating to and selecting your project directory, you’ll see the projects files in the explorer pane on the left side of VS Code:

Explorer pane

If you click around, you’ll see that all of your HTML, CSS and a .scss files are where they should be. Our website now lives on your local machine! Now that you have a website to work on, install Sass.

Getting Sassy in Three Easy Steps!

1.Ā Open a command line

First, you’ll need a command line to make the magic happen. Inside of VS Code, go to View, and then choose Terminal, or use the keyboard shortcut Ctrl + `(the backtick):

Selecting
Selecting "Terminal"

And the bottom of VS Code is now occupied by a terminal window!

Terminal window
Terminal window

Step one: open a command line. Check. āœ…

2. Initiate a npm package.json file

Now you're ready for step two: initiate aĀ npm package.jsonĀ file.

A what? 😰

package.jsonĀ  is a file that stores info about your project: its name, version number, author, licensing info, external dependencies, and more importantly, short snippets of code to execute! (Which, henceforth, we shall refer to as scripts). Think ofĀ package.jsonĀ as an instruction manual forĀ npmĀ to use to re-assemble and run the site.

Let’s create a package file by typing Ā npm initĀ :

npm init

The command line will now prompt you for a bunch of info about your project. If you hit enter on any of the prompts without filling anything in, npm will fill it with the default value, which is shown in parenthesis. If there’s no parenthesis, skipping it will leave it blank:

default and non-default values
Default and non-default values

Go ahead and fill in the prompts to your liking. Don’t worry about the git repository yet. Once all of the fields have been filled in, the command line will show you a preview of yourĀ package.json, asking you if it’s okay. Hit enter to approve.

It is 100% ok
It is 100% okay

Just like that, a Ā package.jsonĀ file will appear in the explorer pane on left edge of VS Code. Click on it and check out what’s going on inside!

{
  "name": "writting-sass",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

What you have is a JSON object with all of the data just entered. AsĀ you install packages, they’ll appear within the dependencies objects.

Okay, initialize a npm package: check! āœ… And now, for the third and final step: install Sass. Finally!

Install Sass

In the command line type the following: Ā npm install sass -gĀ .

npm install sass -g

YouĀ typeĀ npmĀ to tell the command line that you want to execute npm commands. Ā installĀ is the npm command thatĀ you are executing. It will download and install the indicated package(s). In this case, it will install theĀ sassĀ package, along with any dependencies.Ā  Ā -gĀ  is called a flag. It’s telling npm to install the package globally, rather for only our project. You’ll never need to install Sass again!

To test that you’ve got Sass installed on your system, type Ā sass --versionĀ  into the terminal:

sass --version

And the command line responds by telling you which version of Sass you have installed. If you'd messed up and didn't install it, you'd have gotten an error message telling you that Sass isn't recognized:

Step three: install Sass. Complete! āœ…

šŸŽ‰šŸŽ‰šŸŽ‰

How do you turn this thing on?

Okay. You have Sass installed - now how do you make it work?

You installed Sass via npm, which you can useĀ to run Sass and compile your CSS. Going back to theĀ package.jsonĀ file, you may have noticed a ā€œscriptsā€ object:

{
  "name": "writting-sass",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

This is where you’ll put your script to run Sass. We're not going to be doing any testing, so get rid of the test script and replace it with a new script:Ā sass, followed by a colon and pair of quotes:

{
  "name": "writting-sass",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "sass": ""
  },
  "author": "",
  "license": "ISC",
}

Ā Now you’ve defined a script for npm to run calledĀ sass, but it’s empty. If you tried running it, nothing would happen. Within the quotes type the following: Ā sass --watch ./sass/main.scss:./css/style.css

{
  "name": "writting-sass",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "sass": "sass --watch ./sass/main.scss:./css/style.css"
  },
  "author": "",
  "license": "ISC",
}

Let’s unpack what you’ve just written:

  • sassĀ  is telling npm where to look to find the script to execute.

  • --watchĀ  is a flag that npm uses to look for any changes in the Sass file.Ā  If it sees a change made, it will recompile and update the CSS file. Without the watch flag, you’d have to run the script every time you hit save. With the flag, it will automatically update as long as you have the script running in your terminal window.

  • ./sass/main.scssĀ is telling the script located in node-sass where to find the Sass file to compile.

  • Ā A colon Ā :Ā  separates the source path from the destination path.

  • ./css/style.cssĀ tells the script where to compile the CSS to, and what to name it.

You’ve written a script, now it’s time to save theĀ package.jsonĀ file and fire up Sass! 🤘

In the terminal, type ā€œnpm run sassā€:

npm run sass

Ā It’s just like when you initialized the package file:Ā npmĀ tells the command line that you want to execute a npm command. Ā runĀ is the command. And Ā sassĀ is the name of the script that you want to run.

A moment later, the command line will echo the contents of the script and then compile your Ā main.scssĀ into CSS:

Compiling!
Compiling!

And you’re up and running!

Now, as long as you don’t stop the process, either by typing Ctrl+CĀ within the terminal, or clicking the trash can, the script will wait and watch for any changes to compile. Let’s test it by changing the color in one of our variables and saving.

If everything has worked properly, the command line will note the change, and then let us know that it has recompiled the CSS in green:

All clear!
All clear!

But if you make a mistake, such as a typo, Sass will send an error to the command line:

That's not good...
That's not good...

It look's like we missed a "y" at the end of Ā $colour-primaryĀ . Let's fix it.

Fixed!
Fixed!

Sass sees that we've updated the file, and attempts to recompile it. This time we've fixed the typo and receive a green "success" message. You now have both the site and Sass up and running on your local machine, and you can work online or offline from anywhere!

Compiler Modes

Open up your newly compiled style.css sheet:

.form {
  width: 100%;
  padding-bottom: 1.5rem; }
  .form__heading {
    width: 100%;
    color: #fff;
    text-shadow: 0.55rem 0.55rem #11af82;
    background: #15DEA5;
    line-height: 5rem;
    padding: 1.5rem; }
  .form__field label {
    color: #D6FFF5;
    display: block;
    font-size: 2rem;
    line-height: 2rem;
    padding-top: 1.5rem; }
  .form__field input {
    width: 100%;
    background: #001534;
    border: 0.1rem solid #15DEA5;
    padding: 1.5rem;
    color: #D6FFF5;
    font-weight: 900;
    font-style: italic;
    font-size: 2.75rem; }
  .form__field textarea {
    width: 100%;
    color: #15DEA5;
    background: #001534;
    border: 0.1rem solid #15DEA5;
    outline: none;
    padding: 1.5rem;
    margin-bottom: 0.75rem; }

It looks a bit different than when we wrote CSS by hand; however, Sass has preserved the visual hierarchy of the nesting from .scss sheets. This is pretty handy, as you can scan through the CSS file and easily find relevant blocks of code.

Sass has four different compile modes, each rendering the CSS in a different fashion. The first, and default, is what you’ve just seen: Nested mode.

The second compile mode is called expanded, and it looks just like the CSS that you would normally write by hand:

.form {
  width: 100%;
  padding-bottom: 1.5rem;
}
.form__heading {
  width: 100%;
  color: #fff;
  text-shadow: 0.55rem 0.55rem #11af82;
  background: #15DEA5;
  line-height: 5rem;
  padding: 1.5rem;
}
.form__field label {
  color: #D6FFF5;
  display: block;
  font-size: 2rem;
  line-height: 2rem;
  padding-top: 1.5rem;
}
.form__field input {
  width: 100%;
  background: #001534;
  border: 0.1rem solid #15DEA5;
  padding: 1.5rem;
  color: #D6FFF5;
  font-weight: 900;
  font-style: italic;
  font-size: 2.75rem;
}
.form__field textarea {
  width: 100%;
  color: #15DEA5;
  background: #001534;
  border: 0.1rem solid #15DEA5;
  outline: none;
  padding: 1.5rem;
  margin-bottom: 0.75rem;
}

Some people prefer expanded over nested simply because it looks a bit more familiar to them.

The third mode is compact. It renders the CSS with one ruleset per line:

.form { width: 100%; padding-bottom: 1.5rem; }
.form__heading { width: 100%; color: #fff; text-shadow: 0.55rem 0.55rem #11af82; background: #15DEA5; line-height: 5rem; padding: 1.5rem; }
.form__field label { color: #D6FFF5; display: block; font-size: 2rem; line-height: 2rem; padding-top: 1.5rem; }
.form__field input { width: 100%; background: #001534; border: 0.1rem solid #15DEA5; padding: 1.5rem; color: #D6FFF5; font-weight: 900; font-style: italic; font-size: 2.75rem; }
.form__field textarea { width: 100%; color: #15DEA5; background: #001534; border: 0.1rem solid #15DEA5; outline: none; padding: 1.5rem; margin-bottom: 0.75rem; }

Compress is a shorter file, requiring less scrolling, and slightly reduced file sizes, but isn’t necessarily very easy to read.

The fourth and final compile mode is compressed. When Sass compiles the CSS sheet in compressed mode, it removes any unnecessary whitespace and line breaks:

.form{width:100%;padding-bottom:1.5rem}.form__heading{width:100%;color:#fff;text-shadow:.55rem .55rem #11af82;background:#15DEA5;line-height:5rem;padding:1.5rem}.form__field label{color:#D6FFF5;display:block;font-size:2rem;line-height:2rem;padding-top:1.5rem}.form__field input{width:100%;background:#001534;border:0.1rem solid #15DEA5;padding:1.5rem;color:#D6FFF5;font-weight:900;font-style:italic;font-size:2.75rem}.form__field textarea{width:100%;color:#15DEA5;background:#001534;border:0.1rem solid #15DEA5;outline:none;padding:1.5rem;margin-bottom:.75rem}

The end result is pretty tough to read,Ā but it's also a much smaller file. This is also known as a minified CSS file, and is typically used when deploying the live site. The smaller file size reduces the amount of data that needs to be served and downloaded, making load times faster, while reducing storage and data consumption.

Let’s update the script to compile your CSS in compressed mode!

Flying our flags: compiling in compressed mode

At the end of your script, you need to add a new flag: Ā --styleĀ  followed by the style that you want to compile to:compressed:

{
  "name": "writting-sass",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "sass": "sass --watch ./sass/main.scss:./css/style.css --style compressed"
  },
  "author": "",
  "license": "ISC",
}

After you’ve added the flag, hit to saveĀ to update your Sass file and force a recompile:

.form {
  width: 100%;
  padding-bottom: 1.5rem; }
  .form__heading {
    width: 100%;
    color: #fff;
    text-shadow: 0.55rem 0.55rem #11af82;
    background: #15DEA5;
    line-height: 5rem;
    padding: 1.5rem; }
  .form__field label {
    color: #D6FFF5;
    display: block;
    font-size: 2rem;
    line-height: 2rem;
    padding-top: 1.5rem; }
  .form__field input {
    width: 100%;
    background: #001534;
    border: 0.1rem solid #15DEA5;
    padding: 1.5rem;
    color: #D6FFF5;
    font-weight: 900;
    font-style: italic;
    font-size: 2.75rem; }
  .form__field textarea {
    width: 100%;
    color: #15DEA5;
    background: #001534;
    border: 0.1rem solid #15DEA5;
    outline: none;
    padding: 1.5rem;
    margin-bottom: 0.75rem; }

That’s not what we were looking for. It’s still nested! 😭

If you take a closer look at the command line output, you can see where we went wrong:

We never stopped the original Sass script. It’s still running!

To compile using your newly modified script, you need to stop the old script by pressing Ctrl+C. Then, restart it by typingnpm run sass:Ā Ā 

npm run sass

Our Sass script is up and running again, but now it includes our desired output style:

Hit save again and check out the compiled code:

.form{width:100%;padding-bottom:1.5rem}.form__heading{width:100%;color:#fff;text-shadow:.55rem .55rem #11af82;background:#15DEA5;line-height:5rem;padding:1.5rem}.form__field label{color:#D6FFF5;display:block;font-size:2rem;line-height:2rem;padding-top:1.5rem}.form__field input{width:100%;background:#001534;border:0.1rem solid #15DEA5;padding:1.5rem;color:#D6FFF5;font-weight:900;font-style:italic;font-size:2.75rem}.form__field textarea{width:100%;color:#15DEA5;background:#001534;border:0.1rem solid #15DEA5;outline:none;padding:1.5rem;margin-bottom:.75rem}

You made it!

Organizing files and installing packages isn’t the most exciting stuff in the world, but it’s important nonetheless. Remember, you spend way more time reading code than writing it, so the cleaner and better organized you can keep your codebase, the quicker and easier it is to locate and understand blocks of code.

Keep this up, and future you is going to be downright smitten with present you.

In the next chapters we get back to the fun stuff; learning about Sass’ more advanced data types, and how to harness them to make your life even easier!

Ever considered an OpenClassrooms diploma?
  • Up to 100% of your training program funded
  • Flexible start date
  • Career-focused projects
  • Individual mentoring
Find the training program and funding option that suits you best