使用 ASP.NET Core 在“project.json”中排除未缩小的文件

2023-12-31

我正在尝试寻找合适的配置publishOptions inside project.json(ASP.NET Core 1.0/完整框架),以便不发布非缩小文件。

官方文档没有多大帮助:项目.json参考 https://learn.microsoft.com/en-us/dotnet/articles/core/tools/project-json#publishoptions.

搜索通配模式,并找到一些文章gulp例子,我想出了这个wwwroot/js/**/*!(*.min.js),但似乎不起作用。

我的语法错误吗?或者,只是这样project.json and dotnet publish不支持这个语法?

"publishOptions": {
    "include": [
        "wwwroot",
        "Views",
        "Areas/**/Views",
        "appsettings.json",
        "web.config"
    ],
    "exclude": [
        "wwwroot/lib",
        "wwwroot/js/**/*!(*.min.js)",
        "wwwroot/css/*.less",
        "wwwroot/_references.js"
    ],
    "includeFiles": [],
    "excludeFiles": []
},

JavaScript 文件/库管理的典型工作流程是使用 gulp 或 grunt 任务将必要的文件复制到wwwroot某些事件(预构建、后构建、项目打开、清理)可能发生的文件夹。

在最新的工具中,默认的 MVC 不再包含 gulpfile.js,因为最常见的用法是缩小和捆绑 js 文件,即使没有使用外部库,因此 gulp 对于新用户来说可能有点难以承受。

但当您右键单击bundleconfig.json在解决方案资源管理器中创建文件并选择“Bundler & Minifier”>“Convert to Gulp”。

这创建了一个gulpfile.js and package.json(nodejs 依赖项)放在项目的根目录中,并将 npm 文件夹添加到解决方案资源管理器的“依赖项”部分。当您在 Windows 资源管理器中观看时,您会看到node_modules项目根文件夹中的文件夹。 npm 将在此处下载所有包及其依赖项。

生成的gulpfile.js看起来像这样并且有一些预定义的任务。我不会使用此文件作为示例,因为它强烈基于bundleconfig.json它的结构和使用我的gulpfile.json它曾经与旧模板一起提供。

"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 = {
    app: webroot + "app/",
    libs: webroot + "lib/",
    js: webroot + "js/**/*.js",
    minJs: webroot + "js/**/*.min.js",
    css: webroot + "css/**/*.css",
    minCss: webroot + "css/**/*.min.css",
    concatJsDest: webroot + "js/app.min.js",
    concatCssDest: webroot + "css/app.min.css"
};

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

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

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

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

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("libs", function (cb) {
    gulp.src([
        'bootstrap/**/*.js',
        'bootstrap/**/*.css',
        'jquery/**/*.js`, // we can also limit this to `jquery/dist/**/*.js to only include distribution files
        'jquery/**/*.css'
    ], {
        cwd: "node_modules/**"
    })
    .pipe(gulp.dest(paths.libs));
});

gulp.task("app", function (cb) {
    gulp.src([
        'app/**.js'
    ])
    .pipe(gulp.dest(paths.app));
});

gulp.task("default", ['clean', 'libs']);

它看起来比实际情况更复杂。有几个更小的任务(min:js, min:css)和一项通用缩小器任务min它只是按顺序运行所有其他的。

一个干净的任务,删除输出文件wwwroot。从模板转换时,它仅删除默认的wwwroot/js/site.min.js file.

由于默认模板中没有使用任何 JavaScript 库,除了wwwroot/lib文件夹已经不以这种方式处理包了。

因此,您可能想要的第一件事是从 npm 获取 bootstrap 和 jquery,而不是模板提供的静态版本。所以我们将依赖项添加到package.json.

{
  "name": "app",
  "version": "0.0.0",
  "private": true,
  "dependencies": {
    "bootstrap": "3.3.6",
    "jquery": "2.2.0"
  },
  "devDependencies": {
    "gulp": "3.8.11",
    "gulp-concat": "2.5.2",
    "gulp-cssmin": "0.1.7",
    "gulp-uglify": "1.2.0",
    "rimraf": "2.2.8"
  }
}

The libs任务从gulpfile.js上面的示例将把包的所有必需文件复制到wwwroot。我说必需,因为在包中经常有用于调试和东西的非捆绑文件,我们通常不希望在里面wwwroot(它们可以长得很大)。

gulp.task("libs", function (cb) {
    gulp.src([
        'bootstrap/**/*.js',
        'bootstrap/**/*.css'
    ], {
        cwd: "node_modules/**"
    })
    .pipe(gulp.dest(paths.libs));
});

它会寻找所有*.js and *.cssbootstrap 文件夹中的文件node_modules文件夹并将它们复制到path.libs配置为wwwroot/lib/.

The app任务对我们自己的代码执行相同的操作。clean清除文件夹 和 (即在从调试切换到发布版本之前或发布之前)。

最后,您可以将任务绑定到某些 VS 事件。您需要打开“任务运行程序资源管理器”视图(视图 > 其他窗口 > 任务运行程序资源管理器)。您可以在其中选择一个任务并右键单击它,然后选择“绑定”并选择其中一个绑定(构建前、构建后、清理、项目打开)。它们非常自我解释,“清洁”意味着当您执行“构建>清洁解决方案”时。

现在到发布部分。当您发布应用程序时(通过 dotnet 或 Visual Studio),您可以运行某些命令。

In the project.json为此有一个脚本部分。

"scripts": {
  "prepublish": [ "npm install", "bower install", "gulp clean", "gulp min", "gulp libs" ],
  "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
}

每个“prepublish”条目都是一个要执行的命令。在此示例中,在发布开始之前,npm install将首先执行以恢复所有npm依赖关系。然后bower install安装由 Bower 管理的依赖项(如果您不使用 Bower 并通过 npm 完成所有操作,请将其删除)。

接下来的三个命令是有趣的,它们将执行 gulp 任务。我们还可以通过添加“发布”任务来简化此操作。

gulp.task("publish", ['clean', 'libs', 'min']);

"scripts": {
  "prepublish": [ "npm install", "bower install", "gulp publish" ],
  "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
}

这会将发布所需的所有文件复制到 wwwroot 文件夹中,发布文件,然后调用“发布后”脚本。

这是 gulp 中的粗略介绍。它有一个学习曲线,但一旦你让它发挥作用,它就会改善整个工作流程。

这里没有介绍的是添加一个watch可能会查看某个文件夹的任务(我通常使用app项目根目录中的文件夹),当任何文件发生更改时,运行app任务,因此我们的代码被缩小并复制到wwwroot当我们调试它时可用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ASP.NET Core 在“project.json”中排除未缩小的文件 的相关文章

随机推荐

  • 将 JSON 数据映射到具有特定视图模型类型的 Knockout observableArray

    有没有办法将 JSON 数据对象映射到可观察数组 然后依次将可观察数组的每个项目初始化为特定类型的视图模型 我已经查看了所有淘汰赛的文档以及淘汰赛和映射示例 但我找不到任何适合我所追求的答案 所以 我有以下 JSON 数据 var data
  • MATLAB 中的双 for 循环,存储信息

    我在 MATLAB 中有两个 for 循环 其中一个 for 循环导致不同的变量被插入到模型中 这些变量是 43 然后我有 5 个地平线 所以我对模型进行了 215 次估计 我的问题是我想将其存储在 215x5 矩阵中 我有 x5 的原因是
  • LINQ 中的动态查询

    如果我有包含字段的 Customer 类 如何为 Linq 编写动态查询 string name string address int phoneno 我必须根据类似于给出的信息进行查询 query string Empty if stri
  • 数据表服务器端的内连接4表

    我有用于在数据表中显示数据的代码 php 但是这个 php 服务器端 不起作用 什么数据表不能使用内连接 如果可以 如何修复我的代码 再说一遍 如何使用内连接在数据表中主动搜索数据 非常感谢
  • 尝试进一步了解OCaml的接口/模块

    我理解 OCaml 中有以下概念interfaces and module 我现在明白如何使用它们了 然而 我不明白的是如何充分利用它们 例如 在 Java 中 假设我们有一个接口Map我们还有Hashtable and HashMap实施
  • 使用嵌套列表进行分组和求和

    我有嵌套列表 我正在尝试使用 java 流和收集器进行分组和求和以获得所需的结果 这样我就无法循环多个SubAccounts 我必须使用 for 循环或其他一些逻辑 我想使用streams api来实现 有没有可能 Map
  • 在 iOS 7 中的另一个 ViewController 上显示清晰的彩色 ViewController [重复]

    这个问题在这里已经有答案了 在 iOS 7 之前 根据这个流行的 Stackoverflow问题 https stackoverflow com questions 11236367 display clearcolor uiviewcon
  • 当 JLabel 的文本发生变化时,如何阻止 JLabel 改变其大小?

    我在代码中生成一些 JComponent 并使用 GridBag 布局来排列它们 我的布局由 12 行和 3 列组成 每行由一个 JSlider 一个 JCheckBox 和一个 JLabel 组成 这是我用来生成 UI 的代码 final
  • 如何使用纯 JavaScript 将 GBK 转换为 UTF8?

    我想从其他网站加载一些文本 内容是GBK编码的 但我的网站是UTF8 有没有办法可以将这些GBK文本转换为UTF8进行显示 由于某些原因 我只能使用 JavaScript 来实现此目的 http www 1kjs com lib widge
  • 上传多个文件pdo

    如何使用此脚本上传数据库中的多个文件 我想让输入文件和数据库不需要 你怎么认为 脚本是否受保护 这是我的 php pdo 脚本 file FILES file fileName FILES file name fileTmpName FIL
  • 如何使用 ESLint 的新 Flat-config 正确配置解析器和插件?

    如何使用新的 Flat Config 系统配置 ESLint aka eslint config js file 这样它就可以与 TypeScript ESLint ESLint plugin 和 TypeScript 解析器一起使用吗 E
  • 如何使用 StreamingResponse 将多个图像从 FastAPI 后端发送到 JavaScript 前端?

    我有一个 FastAPI 端点 image ocr接受 处理并返回多个图像作为StreamingResponse async def streamer images for image in images Bytes image bytes
  • 在 linq toEntity 中使用自定义方法

    我有一个Person我的数据库中的表有NationalId场地 有没有办法让所有的人都加载均匀NationalId using Ef code first and Linq to entities 不加载全部Person是为了记忆吗 像这样
  • iOS 7 UItableview 单元格背景视图

    我使用图像视图作为表格视图单元格背景视图 当我在 xcode 4 x 中编译源代码时 它工作正常 即在 iOS 6 x 和 7 0 中都工作正常 但是当我在 xcode 5 0 中编译源代码时 背景图像视图没有出现在 iOS 7 中 知道吗
  • 使用 PHP 和 MySQL 存储用户图像的最佳方式是什么?

    我想知道使用 PHP 和 MySQL 存储用户上传的图像 如头像等 的最佳方式是什么 我应该从哪里开始 有关于这方面的好文章吗 最好 取决于您的目标是什么 存储用户上传图像的两种主要方法是将二进制内容作为 BLOB 放入数据库中 或者将图像
  • PLpgSQL 函数查找给定表中仅包含 NULL 值的列

    我们必须找到只有 NULL 值的表的列 我们正在尝试构建一个 plpgsql 函数 它接受表的名称并返回此类列的列表 如何创建这样的函数 我们正在使用 PgAdmin 1 16 可以查询catalog表pg attribute http w
  • nil:NilClass 的未定义方法“collect”

    有人可以帮我解决这个错误吗 帖子中没有方法错误 create 显示 C Users User Documents website app views posts form html erb 第 24 行提出的地方 nil NilClass
  • 从java中的ByteBuffer获取字节数组

    这是从 ByteBuffer 获取字节的推荐方法吗 ByteBuffer bb byte b new byte bb remaining bb get b 0 b length 取决于你想做什么 如果您想要检索剩余的字节 位置和限制之间 那
  • 使用 PAssert containsInAnyOrder() 比较对象的测试管道

    我正在为 Apache Beam 管道编写 JUnit 测试 我开始使用 DoFnTester 但它已被弃用 尽管 Apache Beam 测试您的管道 文档中的示例引用了已被弃用的方法 我现在使用推荐的 TestPipeline 和 PA
  • 使用 ASP.NET Core 在“project.json”中排除未缩小的文件

    我正在尝试寻找合适的配置publishOptions inside project json ASP NET Core 1 0 完整框架 以便不发布非缩小文件 官方文档没有多大帮助 项目 json参考 https learn microso