SASSファイルをコンパイルして、それらを分割し、メインのscssファイルに必要なファイルをインポートするのに問題があります。
以下を含むstylesフォルダーがあります。
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))
});
Path.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)フォルダーを見ると、cssファイルがcompile_bower_sassタスクから生成されていることがわかります(つまり、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ファイルを探していますか?
私は(SierraでMacを使用して)同じ問題を抱えていましたが、グロブスタイルのインクルードを使用している場合にのみ発生したようです。
競合状態が原因であることが判明しました。少し待つのように回避できます...
var gulp = require('gulp');
var sass = require('gulp-sass');
var wait = require('gulp-wait');
gulp.task('scss', function () {
gulp.src('resources/scss/**/*.scss')
.pipe(wait(200))
.pipe(sass())
.pipe(gulp.dest('public/dist'));
});
_@import
_行の間に改行を追加します。
私は他の多くの解決策を試しましたが、_"atomic_save": true
_の設定に関係するSublimeTextの問題であると示唆するものもありましたが、それは私にはうまくいきませんでした。
.pipe(wait(500))
を追加してみました。どちらも機能しませんでした。
次に、問題のある_@import
_の前に改行を追加しました。したがって、_top_menu
_に関するエラーがスローされる場合は、次のようになるように改行を入れてください。
_@import 'custom_bootstrap';
@import 'top_menu';
_
理由はわかりませんが、これが私のために働いた唯一のことです。
ベストプラクティスとして、万が一の場合に備えて、すべての行の間に改行を追加します。
私はあなたが抱えている問題を再現しようとしましたが、私にとってはうまくいくようです。
コードと、比較するフォルダー構造のショットを添付します。
ここで何が必要か完全にはわからないため、唯一の省略は['compile_bower_sass']の部分です。代わりにloadPathを使用する必要がある可能性はありますか?
また、フォルダーのスクリーンショットから、scssファイルがdistにもコピーされていることがわかります。これは望ましくない場合があります。
Gulpコードは次のとおりです。
var gulp = require('gulp');
var sass = require('gulp-sass');
var minifycss = require('gulp-minify-css');
var rename = require('gulp-rename');
var gutil = require('gulp-util');
var paths = {
scss_files: './src/assets/styles/**/*.scss',
dist: './dist'
};
gulp.task('compile_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))
});
フォルダは次のとおりです。 http://take.ms/AOFND
おそらく必要なのは次のとおりです。
var gulp = require('gulp');
var sass = require('gulp-sass');
var rename = require('gulp-rename');
var paths = {
scss_files: './src/assets/styles/**/*.scss',
dist: './dist'
};
gulp.task('compile_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))
});