Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Create a fresh Drupal 10 project.

...

If you have an existing project, and are looking to change your site to use Dart SASS, give this guide a read for some helpful commands, common issues and solutions.

If you are starting a new project, there are also some helpful steps included for you.

...

Changing your project to use Dart SASS with Node 16

If you are updating an existing Node 14 project, that uses npm node-sass, you will need to make a few changes before updating to Node 16 and npm sass.

What is the difference? Read these first - https://www.

...

npmjs.

...

com/

...

package/

...

node-sass/

...

v/

...

7.0.

...

1 vs https://www.

...

npmjs.

...

com/

...

  1. If you have composer globally:

    Code Block
    composer create-project drupal/recommended-project my_site_name_dir 
  2. Change my_site_name_dir to an appropriate name for your project.

...

Create a new, custom Drupal Theme.

  1. Run this command from your project’s root:

    Code Block
    php core/scripts/drupal generate-theme my_new_theme
    1. Change my_new_theme to an appropriate name for your project.

  2. Otherwise, download or create your own theme from scratch.

...

Update composer.json file, in project root.

  1. Ensure to include drush if you would like to use it - "drush/drush": "^11.4" . You can also run composer require drush/drush

...

package/sass

  1. Delete package-lock.json then edit the package.json file, in theme root.

    1. Add or edit what you need. Here’s a helpful example with explanation: https://www.hook42.com/blog/nodejs-version-control-drupal-themes

  2. Run the following, suggested commands:

    1. npm cache clean --force

    2. nvm ls
      Prints the node versions installed on your machine & the current node version you're using.

    3. nvm use 16

    4. npm install

      1. If you try to run npm install however, it will error out due to you trying to use node-sass.

      2. npm uninstall node-sass

        1. Removes node-sass

      3. npm install sass or npm i sass --save or npm install node-sass@npm:sass

        1. Replaces node-sass with the newer sass dependency.

    5. npm install

      1. Should run as expected, if not - follow the errors/warnings as resolve as needed. We have some notes below on known issues.

    6. npm cache clean --force

    7. If you run into a problem, and want to try again:

      1. rm -r node_modules
        This will remove the node_modules folder in your repository. If you are using Webpack, you can also remove the dist folder using rm -r dist and re-build your repository.

Note: If

...

What is the difference? Read these first - https://www.npmjs.com/package/node-sass/v/7.0.1 vs https://www.npmjs.com/package/sass

...

the commands are not automatically altering your package.json file, you may need to edit it manually.

...

Know issues, and Potential warning or errors known with changing Node to version 16 and Dart SASS:

  • Node-Sass - Warning: LibSass and Node Sass are deprecated. While they will continue to receive maintenance releases indefinitely, there are no plans to add additional features or compatibility with any new CSS or Sass features. Projects that still use it should move onto Dart Sass.

  • Are you running a M1 mac? ARM64 isn't supported by any version of node-sass right now.

...

  • If you try to run npm install after switching to Node 16 - it will error out.

...

  • npm uninstall node-sass

  • npm install sass or npm i sass --save or npm install node-sass@npm:sass

...

Create a Lando, or DDev project.

  1. https://docs.drupalcommerce.org/commerce2/developer-guide/install-update/quick-start

  2. https://ddev.readthedocs.io/en/latest/users/quickstart/#craft-cms

  3. https://stackoverflow.com/questions/49785023/how-can-i-create-and-load-a-second-database-in-ddev

...

Start the project.

...

Additional, helpful links:

...

  • Math changes required when using Dart Sass - Examples:

Code Block
// This:
@function strip-unit($num) {
  @return $num / ($num * 0 + 1);
}

// Should become this:
@use "sass:math";

@function strip-unit($num) {
  @return math.div($num, ($num * 0 + 1));
}

Code Block
// This:
$browser-context: 16;
@function rem($pixels, $context: $browser-context) {
  @return #{strip-unit($pixels)/$context}rem;
}

// Should become this:
@use "sass:math";

$browser-context: 16;
@function rem($pixels, $context: $browser-context) {
  @return #{math.div(strip-unit($pixels), $context)}rem;
}

Code Block
// These:
$base-space: 1rem; // 16px
$space-10: $base-space / 2; // 8px
$space-20: $base-space * 2; // 32px

// Should become like these:
$base-space: 1rem; //16px
$space-10: calc($base-space / 2); // 8px
$space-20: calc($base-space * 2); // 32px