2016-05-05 12 views
0

私はpro npm/gulp-styleワークフローのnoobieです。私は単純なwebappを構築するためにreact-starterifyというレポを使用しています。Sass @importはパーシャルをインポートしていません

@import "variables"を使って部分的なscssファイルを追加しようとしています。私のmain.scssファイルにあります。しかし、最終的にコンパイルされたCSSファイルでは、実際に "@import 'variables';"ファイルの一番上に置くのではなく、ファイルの一部として取り出します。

私には何が欠けていますか?ここで

は私gulpfile.babel.jsです:

import gulp from 'gulp'; 
import autoprefixer from 'autoprefixer'; 
import browserify from 'browserify'; 
import watchify from 'watchify'; 
import source from 'vinyl-source-stream'; 
import buffer from 'vinyl-buffer'; 
import eslint from 'gulp-eslint'; 
import babelify from 'babelify'; 
import uglify from 'gulp-uglify'; 
import rimraf from 'rimraf'; 
import notify from 'gulp-notify'; 
import browserSync, { reload } from 'browser-sync'; 
import sourcemaps from 'gulp-sourcemaps'; 
import postcss from 'gulp-postcss'; 
import rename from 'gulp-rename'; 
import nested from 'postcss-nested'; 
import vars from 'postcss-simple-vars'; 
import extend from 'postcss-simple-extend'; 
import cssnano from 'cssnano'; 
import htmlReplace from 'gulp-html-replace'; 
import imagemin from 'gulp-imagemin'; 
import pngquant from 'imagemin-pngquant'; 
import runSequence from 'run-sequence'; 
import ghPages from 'gulp-gh-pages'; 

const paths = { 
    bundle: 'app.js', 
    entry: 'src/Index.js', 
    srcCss: 'src/**/main.scss', 
    srcImg: 'src/images/**', 
    srcLint: ['src/**/*.js', 'test/**/*.js'], 
    dist: 'dist', 
    distJs: 'dist/js', 
    distImg: 'dist/images', 
    distDeploy: './dist/**/*' 
}; 

const customOpts = { 
    entries: [paths.entry], 
    debug: true, 
    cache: {}, 
    packageCache: {} 
}; 

const opts = Object.assign({}, watchify.args, customOpts); 

gulp.task('clean', cb => { 
    rimraf('dist', cb); 
}); 

gulp.task('browserSync',() => { 
    browserSync({ 
    server: { 
     baseDir: './' 
    } 
    }); 
}); 

gulp.task('watchify',() => { 
    const bundler = watchify(browserify(opts)); 

    function rebundle() { 
    return bundler.bundle() 
     .on('error', notify.onError()) 
     .pipe(source(paths.bundle)) 
     .pipe(buffer()) 
     .pipe(sourcemaps.init({ loadMaps: true })) 
     .pipe(sourcemaps.write('.')) 
     .pipe(gulp.dest(paths.distJs)) 
     .pipe(reload({ stream: true })); 
    } 

    bundler.transform(babelify) 
    .on('update', rebundle); 
    return rebundle(); 
}); 

gulp.task('browserify',() => { 
    browserify(paths.entry, { debug: true }) 
    .transform(babelify) 
    .bundle() 
    .pipe(source(paths.bundle)) 
    .pipe(buffer()) 
    .pipe(sourcemaps.init({ loadMaps: true })) 
    .pipe(uglify()) 
    .pipe(sourcemaps.write('.')) 
    .pipe(gulp.dest(paths.distJs)); 
}); 

gulp.task('styles',() => { 
    gulp.src(paths.srcCss) 
    .pipe(rename({ extname: '.css' })) 
    .pipe(sourcemaps.init()) 
    .pipe(postcss([vars, extend, nested, autoprefixer, cssnano])) 
    .pipe(sourcemaps.write('.')) 
    .pipe(gulp.dest(paths.dist)) 
    .pipe(reload({ stream: true })); 
}); 

gulp.task('htmlReplace',() => { 
    gulp.src('index.html') 
    .pipe(htmlReplace({ css: 'styles/main.css', js: 'js/app.js' })) 
    .pipe(gulp.dest(paths.dist)); 
}); 

gulp.task('images',() => { 
    gulp.src(paths.srcImg) 
    .pipe(imagemin({ 
     progressive: true, 
     svgoPlugins: [{ removeViewBox: false }], 
     use: [pngquant()] 
    })) 
    .pipe(gulp.dest(paths.distImg)); 
}); 

gulp.task('lint',() => { 
    gulp.src(paths.srcLint) 
    .pipe(eslint()) 
    .pipe(eslint.format()); 
}); 

gulp.task('watchTask',() => { 
    gulp.watch(paths.srcCss, ['styles']); 
    gulp.watch(paths.srcLint, ['lint']); 
}); 

gulp.task('deploy',() => { 
    gulp.src(paths.distDeploy) 
    .pipe(ghPages()); 
}); 

gulp.task('watch', cb => { 
    runSequence('clean', ['browserSync', 'watchTask', 'watchify', 'styles', 'lint', 'images'], cb); 
}); 

gulp.task('build', cb => { 
    process.env.NODE_ENV = 'production'; 
    runSequence('clean', ['browserify', 'styles', 'htmlReplace', 'images'], cb); 
}); 

私もそれは未定義として@mixinで変数を見て、別の問題に気付いています。例えば

@mixin blacklinks ($link, $visit, $hover, $active, $disabled) { 
    a, 
    .text-btn-black { 
     @include a1; 
     text-decoration: none !important; 
     color: $link; 
     &:visited { 
      color: $visit; 
     } 
     &:hover { 
      color: $hover; 
     } 
     &:active { 
      color: $active; 
     } 
     &:disabled { 
      color: $disabled 
     } 
    } 
} 

それはそのvarが別の部分_base.scssから送信されている$のリンク、で失敗します。

@include blacklinks($black, $black, $mediumgray, $darkgray, $disabledtext); 

答えて

1

あなたはpostcss-importパッケージをインストールして使用する必要があります。

gulpfile.js

import atImport from 'postcss-import'; 

gulp.task('styles',() => { 
    gulp.src(paths.srcCss) 
    .pipe(rename({ extname: '.css' })) 
    .pipe(sourcemaps.init()) 
    .pipe(postcss([atImport, vars, extend, nested, autoprefixer, cssnano])) 
    .pipe(sourcemaps.write('.')) 
    .pipe(gulp.dest(paths.dist)) 
    .pipe(reload({ stream: true })); 
}); 

のsrc /スタイル/ main.scss

@import 'variables.scss'; 

.foo { 
    color:$c; 
} 

のsrc /スタイル/

はここで単純化されたが、実施例ですvariables.scss

$c: blue; 
+0

これがうまくいった!どうもありがとうございました。 –

+0

gulpfile.bable.jsコードの下に別の問題を追加しました。 –

関連する問題