SASS ファイルをコンパイルする際に問題が発生し、メインの scss ファイルに必要なものを分割してインポートしています。
以下を含むスタイルフォルダーがあります。
main.scss
top_menu.scss
main.scss にいくつかのインポートを追加しました。
@import 'font-awesome';
@import 'bootstrap';
@import 'custom_bootstrap';
@import 'top_menu';
私のgulp-sassタスクは次のようになります
gulp.task('compile_sass', ['compile_bower_sass'], function () {
return gulp.src(paths.scss_files, {base:'src'})
.pipe(gulp.dest(paths.dist))
.on('error', gutil.log)
.pipe(sass().on('error', sass.logError))
.pipe(minifycss({
keepSpecialComments: false,
removeEmpty: true
}))
.pipe(rename({suffix: '.min'}))
.pipe(gulp.dest(paths.dist))
});
paths.scss_files 変数は次のように設定されています。
scss_files: './src/assets/styles/**/*.scss'
タスクを実行すると、次のエラーが表示されます。
インポートするファイルが見つからないか読み取れません: top_menu
私は実際に自分のscssを別々の関連するサブフォルダーに分割してから、 @import: 'navigation\top_menu' のようなものを使用できるようにしたいと考えています。
なぜこのエラーが発生するのでしょうか?
ありがとう
編集:
compile_bower_sass タスクは、main.scss の @import 行からわかるように、必要な他のいくつかの scss ファイル (font-awesome、bootstrap、custom_bootstrap) をコンパイルします。
compile_sass タスクを実行して出力 (dist) フォルダーを確認すると、compile_bower_sass タスクから css ファイルが生成されていることがわかります (つまり、font-awesome.css、bootstrap.css、custom_bootstrap.min.css)。top_menu.scss ファイルもコピーされますが、コンパイルされないことに気付きました。これがエラーの原因だと思います。
タスクで順序を指定する必要があるので、main.scss を最後にコンパイルして、カスタムの top_menu.scss などの必要なファイルが最初にコンパイルされ、メイン ファイルがアクセスできるようにすることができますか?
編集2
わかりましたので、これはコンパイルの順序にかかっていたという私の考えは正しいと思います。
scss_files 変数を変更して、gulp-sass にパイプされる順序を明示的に設定すると (今回は、さらにフォルダーに整理しました)
scss_files: ['./src/assets/styles/custom_bootstrap.scss',
'./src/assets/styles/navigation/top_menu.scss',
'./src/assets/styles/navigation/user_toolbar.scss',
'./src/assets/styles/main.scss']
これで、元の compile-sass タスクがそのまま機能します。
では、次の質問は、main.scss ファイルが最後にコンパイルされるように、gulp-sass をどのように構成すればよいかということです。それとも、私はこれをすべて間違った方法で行っていますか?
編集3:
最初にこの質問をするときに、おそらくこれらの追加のタスク構成を追加する必要がありました。したがって、compile_sass タスクでは、compile_bower_sass を最初に実行する必要があります。
/*-BOWER PACKAGEs INCLUSION --------------------------------------------*/
gulp.task('compile_bower_sass', ['compile_bower_css'], function(){
var sassFiles = mainBowerFiles('**/*.scss');
return gulp.src(sassFiles)
.pipe(rename(function(path){
path.basename = path.basename.replace(/^_/, '');
return path;
// required where the string begins with _ , meaning that sass won't compile it (bootstrap)
}))
.pipe(sass({onError: function(e) { console.log(e); } }))
.pipe(gulp.dest(paths.dist_styles));
});
gulp.task('compile_bower_css', function(){
var cssFiles = mainBowerFiles('**/*.css');
return gulp.src(cssFiles)
.pipe(gulp.dest(paths.dist_styles));
});
gulp.task('compile_sass', ['compile_bower_sass'], function () {
return gulp.src(paths.scss_files, {base:'src'})
.pipe(sass({outputStyle: 'compressed'})
.on('error', sass.logError))
.pipe(rename({suffix: '.min'}))
.pipe(gulp.dest(paths.dist))
});
私は今で終わっています
インポートするファイルが見つからないか読み取れません: font-awesome
私の dist スタイル フォルダーでは、font-awesome.css が生成されていることがわかります。私は gulp と sass のコンパイルにかなり慣れていないので、ここで何かを誤解していることは間違いありません。
@import ステートメントが使用されている場合、ファイルはその名前の scss ファイルまたは css ファイルを探していますか?