Gulp 编译多个 scss/js 文件

Gulp compile multiple scss/js files

这是我第一次使用 Gulp,我对自己做错了什么有点困惑,我的结构是这样的:

assets
   -> resources
   -> dist
      -> main.css
   -> src
      -> scss/bootstrap
      -> scss/main.scss

      -> js/bootstrap
      -> js/main.js

我的目标是创建一个 gulp 文件,它将编译我的 JavaScript 和我的 SCSS,并将它们输出到 /dist 中的 "main.css" 和 "main.js"。

console.log('Starting compiling process...');

const gulp = require('gulp');
const jsmn = require('gulp-uglify');
const sass = require('gulp-sass');

let src         = './resources/src';
let dist        = './resources/dist';
let bootstrap   = './node_modules/bootstrap';
let custom      = './resources/src/scss';

//Configure options
let scss = {
    in: [src + 'scss/*'],
    out: dist,
    watch: src + '/scss/*',
    watchjs: src + '/js/*.js',
    sassOps: {
        outputStyle: 'compressed',
        precision: 3,
        errLogToConsole: true,
        includePaths: [bootstrap + '/scss']
    }
};

//Default task
gulp.task('compile', function() {
    return gulp.src(scss.in)
        .pipe(sass(scss.sassOps))
        .pipe(gulp.dest(scss.out));
});

gulp.task('compress', function() {
    return gulp.src([src + '/js/*.js'])
        .pipe(jsmn())
        .pipe(gulp.dest(dist));
});

gulp.task('watch', function() {
    gulp.watch([scss.watchjs, scss.watch], gulp.parallel('compile', 'compress'));
});

现在它编译我的 Javascript,尽管 SCSS 是一个问题...

如果您有多个 SCSS/JS 文件,您将需要使用 gulp concat 将所有文件合并为一个文件。

这是我用来从多个 SCSS 文件生成我的 CSS 文件的方法

// styles
gulp.task('styles', function() {
    gulp.src('sass/**/*.scss')
        .pipe(sass({
            outputStyle: 'compressed'
        }).on('error', sass.logError))
        .pipe(autoprefixer({
            browsers: ['last 2 versions']
        }))
        .pipe(concat('app.css'))
        .pipe(gulp.dest('dist/css'))
        .pipe(browserSync.stream());
});

我也建议使用 Gulp Autoprefixer

Gulp 编译你的 scss 的任务,添加浏览器前缀,替换源文件中使用的 url 缩小并将它们输出到 /dist 中的 "main.css"。

/* ------------------------------------
Process CSS
------------------------------------ */
gulp.task('processCss', function () {
    return gulp.src('scss/*.scss')
        .pipe(sass({outputStyle: 'compressed'}).on('error', sass.logError))
        .pipe(autoprefixer({
            browsers: ['last 2 versions'],
            cascade: false
        }))
        .pipe(rename('main.css')) // will be prefixed and minified
        .pipe(replace('url("../../', 'url("../'))
        .pipe(stripCssComments({preserve: false}))
        .pipe(gulp.dest('dist'));
});

而这个任务是编译你的js文件,缩小并输出到/dist中的"main.js"。

gulp.task('processFooterJs', function () {
    return gulp.src('js/*.js')
        .pipe(concat('main.js'))
        .pipe(uglify())   // will be compressed
        .pipe(gulp.dest('dist'));
});

请使用 npm 安装这些依赖项

gulp-autoprefixer
gulp-concat
gulp-strip-css-comments
gulp-uglify
gulp-rename
gulp-replace

并像这样将它们导入文件的顶部:

    var autoprefixer = require('gulp-autoprefixer'),
        concat = require('gulp-concat'),
        stripCssComments = require('gulp-strip-css-comments'),
        uglify = require('gulp-uglify'),
        rename = require('gulp-rename'),
        replace = require('gulp-replace');

它会完成的:)

如果您的 js 文件有多个来源,例如您需要从节点模块导入 jquery.js 并从 js 文件夹导入 index.js,您的任务将是这样的:


/* ------------------------------------
Process JS for footer
------------------------------------ */
gulp.task('processFooterJs', function () {
    return gulp.src([    ,
        'node_modules/jquery/dist/jquery.min.js',
        'js/index.js',
    ])
      .pipe(concat('main.js'))
        .pipe(uglify())  
        .pipe(gulp.dest('dist'));
});

希望对你有所帮助,祝你好运:)