GulpでSass(.scss)をコンパイルしたらDeprecation Warning: The legacy JS API is deprecated and …という警告が出るので対処

(2024.11.29追記)
この記事を書いた後で、新しいSass JS APIに対応した新バージョンの「gulp-sass(v6.0.0)」が公開されました。
v6にアップデートしますと、非推奨の警告メッセージは出なくなります。
ただ、オプションの書き方が変更になっていますので、「gulp-sass が v6.0.0アップデート公開。新しいSass JS APIに対応」の記事内で紹介しています。

前回の更新で、Gulp v5.0.0の関連記事をアップしたところ、思いの外アクセスが多く、「Gulpなんて、オワコンかな…。誰も使っていないかも…」と思っていた私にとって「意外と使っている人いるんだ」という驚きと、お仲間がいることに嬉しささえ感じました。

HTMLのコーディングするくらいであれば、「Sassコンパイル」「画像圧縮」「Javascriptの結合」で事足りるし、Viteも興味あるけども機能が多すぎる(オーバースペック)??で、Gulpに長年お世話になっておりました。

…が、それに水を差すようなできごとが。。。

The legacy JS API is deprecated の警告

最近になって、Gulpを走らせコンパイルすると、以下のような非推奨の警告メッセージが表示されるようになりました。

Deprecation Warning: The legacy JS API is deprecated and will be removed in Dart Sass 2.0.0.

More info: https://sass-lang.com/d/legacy-js-api

調べると、以下のようなことらしいです。

この警告メッセージは、Dart Sass が現在使用している「レガシー(旧式)」なJavaScript API(プログラムが提供するインターフェース)が非推奨(Deprecated)であり、Dart Sass 2.0.0 で削除される予定であることを示しています。

もろもろ調べて、パッケージも最新にし、Dart Sassにも移行したわけですが…、どうしても上記の警告メッセージが消えない…!!

…ということで、黙ってもらうことにしました😂

警告メッセージを消す方法

「gulp-sass」の公式ドキュメントを読んだところ、オプションがsass.sync()で書けるようですので、そこに警告メッセージを出さない設定を以下のように変更したところ(ハイライトした33〜38行目)、警告メッセージは出なくなりました。

以下に、例として私の gulpfile.mjs から Sassの部分をご紹介します。

gulpfile.mjs

import gulp from 'gulp'; // gulpをインポート
const { series, parallel, src, dest, watch } = gulp; // series, parallel, src, dest, watchがそのまま使えるように

// sass 関連インポート ---------------------------------------------
import * as dartSass from 'sass'; // sassというモジュールをdartSassという名前でインポート
import gulpSass from 'gulp-sass'; // SassファイルをCSSにコンパイルするためのプラグイン
const sass = gulpSass(dartSass); // gulp-sassの関数にsassコンパイラを渡して定数sassを定義
import sassGlob from 'gulp-sass-glob-use-forward' // 複数のSassファイルを一括でインポートできるプラグイン(変更)
import plumber from 'gulp-plumber'; // エラー時、gulpを停止させず、エラーメッセージを表示するプラグイン
import notify from 'gulp-notify'; // エラーをデスクトップ通知
import sourcemaps from 'gulp-sourcemaps'; // ソースマップを作ってくれるプラグイン

// postcss 関連インポート ---------------------------------------------
import postcss from 'gulp-postcss'; // CSSを出力
import autoprefixer from 'autoprefixer'; // 自動でベンダープレフィックスを付ける

// 参照元パス
const srcPath = {
  css: './src/sass/**/*.scss',
};

// 出力先パス
const destPath = {
  css: './dest/css',
};

// Sassコンパイル
const dartSassCompiler = (done) => {
  src(srcPath.css) // コンパイルするSassファイルを指定
    .pipe(plumber({errorHandler: notify.onError("Error: <%= error.message %>")})) // エラーになってもgulp自体の停止せず、エラーメッセージを表示
    .pipe(sourcemaps.init()) // ソースマップを初期化
    .pipe(sassGlob()) // 複数のSassファイルをまとめて一括でインポート
    .pipe(
      sass.sync({
        silenceDeprecations: ['legacy-js-api'], // 警告メッセージを出さない
        outputStyle: 'expanded'
      }).on('error', sass.logError)
    )
    .pipe(postcss([autoprefixer()])) // 自動でベンダープレフィックスを付ける
    .pipe(sourcemaps.write('./')) // ソースマップを出力する
    .pipe(dest(destPath.css)); // 出力先ディレクトリを指定
    done(); //done()でタスク完了
};

export { dartSassCompiler };

// ファイル監視
const watchFiles = (done) => {
  watch(srcPath.css, dartSassCompiler); // scssファイルの監視 & sassコンパイル
  done(); //done()でタスク完了
};

// npx gulpというコマンドで実行
export default series(dartSassCompiler, watchFiles);

それにしても、Gulpの情報は少なくなりましたね…。
The legacy JS API is deprecated…の警告メッセージの件は、Viteの対処法を書いているページにはいっぱい出会ったものの、Gulpについては見つけられませんでした。
なので、どちらも公式ドキュメントの情報からです。

gulp-sass

https://www.npmjs.com/package/gulp-sass
「gulp-sass」の公式ドキュメント。

Breaking Change: Legacy JS API

https://sass-lang.com/documentation/breaking-changes/legacy-js-api/
警告メッセージ内のリンク(対処法)。

ただ、「gulp-sass」がいつこの問題に対応するかも不明なので、私自身は新しい案件に関してはnpm-scriptsで代替していっております。(面倒くさかった…😢)

取り急ぎ、「Gulpは使いたい。でも非推奨の警告メッセージは黙らせたい人」向けの記事になりました。

「gulp-sass」の今後について(追記)

根本的な解決には至っていないこの記事を書いた後、下記ページを見つけました。(※2024年11月13日)

Migrate to use the new Sass JS API by default #846

その中のChangelog.mdを見ると、「gulp-sass」は次期バージョンアップ(v6)で、デフォルトで新しい Sass JS APIを使用するように変更予定っぽい。
良かったーーー!🙌

**Change**
Migrate to use the [new Sass JS API](https://sass-lang.com/documentation/js-api/modules#compile) internally by default


*変更**
デフォルトで [新しい Sass JS API](https://sass-lang.com/documentation/js-api/modules#compile) を内部的に使用するように移行します

でも、いつになるかはわかりません…。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

keyboard_control_keyTOP