質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.38%

  • Sass

    386questions

    Sassは、プログラミング風のコードでCSSを生成できるスタイルシート言語です。 scss ファイルを、変換(コンパイル)してCSSファイルを作成します。

  • gulp

    350questions

    gulpは、Node.jsをベースとしたタスク自動化ツールの一つ。ストリームでファイルを処理することが特徴です。CSSプリプロセッサの使用時のコンパイルや、CSS・JavaScriptファイルの圧縮・結合などを自動的に行うことができます。

【gulp】Sassのパーシャルファイル更新時に、特定のSassファイルも更新させたい

解決済

回答 3

投稿

  • 評価
  • クリップ 1
  • VIEW 2,785

ukotsu

score 11

前提・実現したいこと

下記ディレクトリ構造にて、Sass + browser-syncを使用し作業をしています。
htmlへ読み込むcssはstyle.css(style.scss)だけで、style.scssにはその他パーシャルファイルのインポートのみを記述しています。

この状態で「style.scss」を更新するとブラウザへ自動的に変更が反映されますが、
「_common.scss」や「_module.scss」等のパーシャルファイルを更新しても、
再度「style.scss」を更新するまではブラウザへ変更が反映されません。

実現したいことは「パーシャルファイル更新時にもブラウザへ変更を反映させたい」なのですが、
そのためには「パーシャルファイル更新時に自動的にstyle.scssを再コンパイルさせる」ことなのかなと考えています。

初歩的なことで申し訳ございませんが、お知恵をお貸し頂けますと幸いです。
よろしくお願い致します。

root/
├ src/
│ ├ index.html
│ └ sass/
│   ├ style.scss
│   ├ _common.scss
│   ├ _module.scss
│   └ _animation.scss
└ dest/
var
  gulp = require('gulp'),
  sass = require('gulp-sass'),
  browser = require('browser-sync'),
  changed = require('gulp-changed');

var paths = {
  work: 'src',
  scss: 'src/sass/**/*.scss'
  dist: 'dist',
  distCss: 'dist/css'
};

gulp.task('server', function() {
  browser({
    server: {
      baseDir: paths.dist
    }
  });
});

gulp.task('sass', function() {
  gulp
    .src(paths.scss)
    .pipe(sass())
    .pipe(changed(paths.distCss))
    .pipe(gulp.dest(paths.distCss))
    .pipe(browser.reload({
      stream: true
    }));
});

gulp.task('watch', function() {
  gulp.watch(paths.scss, ['sass']);
});

gulp.task('default', ['watch', 'server']);
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

check解決した方法

+1

今回はgulp-changedをoffにして、変更の有無に関わらず全てのscssをコンパイルする設定で一旦自己解決をいたしました。
ありがとうございました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

Githubを見てみると、
Using newer to compile LESS file with imports #29
ってパーシャルファイルを更新しても行われないって事に。しかし解決方法も。
checkForModifiedImports関数を定義する方法で回避。
checkForModifiedImports.coffee
Gruntfile.coffeeと同一階層にlibディレクトリを作成し、その中に保存するらしい。
こんなかんじ。

'use strict'
checkForModifiedImports = require('./lib/grunt-newer-util').checkForModifiedImports

module.exports = (grunt) ->
  grunt.initConfig
    sass:
      options:
        compass: true
        precision: 3

      default:
        files: [
          expand: true
          cwd: '../htdocs/_scss'
          src: ['*.scss']
          dest: '../htdocs/common/css'
          ext: '.css'
        ]
        options:
          style: 'expanded'

    watch:
      sass:
        files: '../htdocs/**/*.scss'
        tasks: [
          'newer:sass:default'
        ]

    newer:
      options:
        override: checkForModifiedImports

  # Load grunt tasks.
  require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks)

  # Register tasks.
  grunt.registerTask 'default', [
    'newer:sass:default'
    'watch'
  ]

  return;


sass:defaultの前にnewerを付けたり、newerタスクのoverrideオプションを設定したりするのと、2行目にさっきの関数checkForModifiedImports.coffeeを読み込む。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/09 14:03

    ご回答ありがとうございます。
    ご助言いただいた内容はGruntだけの対処方法でしょうか。「gulp-newer」等で検索しましたが、当方に理解できる内容は出てきませんでした。

    今回はgulp-changedをoffにして、変更の有無に関わらず全てのscssをコンパイルする設定で自己解決をいたしました。
    ありがとうございました。

    キャンセル

0

task.'watch'とtask.'default'を分けないで、こんな感じでまとめて書いてみたらどうでしょう?
うちのgulpfile.jsだとそうなっていて、
$gulp するだけで全てのscssの変更を監視して、保存のたびにブラウザを更新してくれます。

gulp.task('default', ['server'], function() {
    gulp.watch(paths.scss, ['sass']);
});


(※私もgulp初心者なので見当違いだったらすみません)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/09 14:01

    ご回答ありがとうございます。
    ご助言いただいた内容を試してみましたが、やはりパーシャルファイル保存時にはブラウザ更新はされませんでした…。

    今回はgulp-changedをoffにして、変更の有無に関わらず全てのscssをコンパイルする設定で自己解決をいたしました。
    ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.38%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Sass

    386questions

    Sassは、プログラミング風のコードでCSSを生成できるスタイルシート言語です。 scss ファイルを、変換(コンパイル)してCSSファイルを作成します。

  • gulp

    350questions

    gulpは、Node.jsをベースとしたタスク自動化ツールの一つ。ストリームでファイルを処理することが特徴です。CSSプリプロセッサの使用時のコンパイルや、CSS・JavaScriptファイルの圧縮・結合などを自動的に行うことができます。