javascript - 将 css/js 缩小到各自的文件中

标签 javascript gulp dependencies

我有来自 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"]);

我遇到的问题是目录中的一个 js 文件依赖于淘汰赛,但我只在网站的其中一个页面上使用淘汰赛。我不想在我的共享 View 中包含淘汰赛,并且默认将所有文件捆绑到一个文件中会导致 JS 错误“ko 未定义”,因为其中一个 JS 文件依赖于 KO。

有没有一种方法可以单独缩小文件,而不将其连接到主“site.min.css”中?

最佳答案

首先,您需要从 min:js 任务中排除 Knockout 文件。在路径前面添加 ! 告诉 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("."));
});

然后,您需要创建一个新任务 min:knockout,它除了缩小 Knockout 文件外什么也不做。您可能希望缩小的文件以 .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("."));
});

最后,您需要确保在运行 minminPreBuild 任务时执行新的 min:knockout 任务:

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

关于javascript - 将 css/js 缩小到各自的文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38548264/

相关文章:

javascript - Web 组件和依赖项隔离

javascript - 使用 jQuery ui slider 更改 d3.js 绘制的矩形元素的高度

javascript - 如何使用jquery/javascript通配符查找图像

angularjs - 为 Karma 测试注入(inject)服务时未定义服务 - AngularJS

android - 库 com.google.android.gms :play-services-base is being requested by various other libraries at [[15. 0.1,15.0.1]],但解析为 16.0.1

java - 无法解析依赖项: org. springframework.transaction

javascript - 你能把图像映射放在图像映射中吗? (JavaScript)?

javascript - google maps api 附加搜索框

javascript - 咕噜 Jade 编译

sass - Gulp Sass 输出的结构和样式