简体   繁体   English

将CSS / JS缩小到各自的文件中

[英]minify css/js into their individual files

I have this default gulp file from a Visual Studio template: 我有一个来自Visual Studio模板的默认gulp文件:

/// <binding BeforeBuild='clean, minPreBuild' />
"use strict";

var gulp = require("gulp"),
    rimraf = require("rimraf"),
    concat = require("gulp-concat"),
    cssmin = require("gulp-cssmin"),
    uglify = require("gulp-uglify");

var webroot = "./wwwroot/";

var paths = {
    js: webroot + "js/**/*.js",
    minJs: webroot + "js/**/*.min.js",
    css: webroot + "css/**/*.css",
    minCss: webroot + "css/**/*.min.css",
    concatJsDest: webroot + "js/_site.min.js",
    concatCssDest: webroot + "css/_site.min.css"
};

gulp.task("clean:js", function (cb) {
    rimraf(paths.concatJsDest, cb);
});

gulp.task("clean:css", function (cb) {
    rimraf(paths.concatCssDest, cb);
});

gulp.task("clean", ["clean:js", "clean:css"]);

gulp.task("min:js", function () {
    return gulp.src([paths.js, "!" + paths.minJs], { base: "." })
        .pipe(concat(paths.concatJsDest))
        .pipe(uglify())
        .pipe(gulp.dest("."));
});

gulp.task("min:css", function () {
    return gulp.src([paths.css, "!" + paths.minCss])
        .pipe(concat(paths.concatCssDest))
        .pipe(cssmin())
        .pipe(gulp.dest("."));
});

gulp.task("min", ["min:js", "min:css"]);
gulp.task("minPreBuild", ["min:js", "min:css"]);

The problem I'm having is one of my js files in the directory has a dependency on knockout, but I'm only using knockout on one of the pages on the site. 我遇到的问题是目录中的js文件之一依赖于剔除,但是我只在网站的页面之一上使用剔除。 I don't want to include knockout on my shared view, and the default bundling all files into a single file causes a JS error "ko is undefined" as one of the JS files is dependent on KO. 我不想在我的共享视图上包括删除功能,并且默认将所有文件捆绑到一个文件中会导致JS错误“ ko is undefined”,因为其中一个JS文件依赖于KO。

Is there a way that I can minify files individually, without concatting it into the main "site.min.css"? 有没有一种方法可以使我单独缩小文件,而又不将其压缩到主要的“ site.min.css”中?

First you need to exclude the Knockout file from your min:js task. 首先,您需要从min:js任务中排除Knockout文件。 Prepending a path with ! !开头 tells gulp to ignore that file: 告诉gulp忽略该文件:

gulp.task("min:js", function () {
  return gulp.src([
        paths.js, 
        "!" + paths.minJs,
        "!js/path/to/knockout.js" // don't include knockout in _site.min.js
      ], { base: "." })
    .pipe(concat(paths.concatJsDest))
    .pipe(uglify())
    .pipe(gulp.dest("."));
});

Then you need to create a new task min:knockout that does nothing but minify your Knockout file. 然后,您需要创建一个新任务min:knockout ,该任务除了缩小您的Knockout文件外什么也不做。 You'll probably want the minified file to end with a .min.js extension so you'll have to install the gulp-rename plugin as well. 您可能希望缩小的文件以.min.js扩展名结尾,因此您也必须安装.min.js gulp-rename插件。

var rename = require('gulp-rename');

gulp.task("min:knockout", function () {
  return gulp.src("js/path/to/knockout.js", { base: "." })
    .pipe(rename("js/_knockout.min.js"))
    .pipe(uglify())
    .pipe(gulp.dest("."));
});

Finally you need to make sure your new min:knockout task is executed when running the min and minPreBuild tasks: 最后,您需要确保在运行minminPreBuild任务时执行了新的min:knockout任务:

gulp.task("min", ["min:js", "min:knockout", "min:css"]);
gulp.task("minPreBuild", ["min:js", "min:knockout", "min:css"]);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM