Ответ 1
Я считаю, что стандартная система миниатюр несколько ограничена, и для таких вещей, как исключение файлов, я обычно использую вместо этого задачу, например, Gulp.
Итак, вот как сделать то, что вы хотите, используя глоток:
Добавление поддержки npm
Сначала добавьте поддержку пакетов npm, добавив файл package.json, если у вас его еще нет, внутри проводника решений щелкните правой кнопкой мыши имя вашего проекта, затем добавьте новый элемент и найдите файл конфигурации npm.
Внутри package.json добавьте следующие необходимые зависимости gulp, а также любую другую библиотеку на стороне клиента, которую вы хотите использовать, например jquery, bootstrap и т. Д.:
{
"version": "1.0.0",
"name": "asp.net",
"private": true,
"devDependencies": {
"gulp": "3.9.1",
"gulp-concat": "2.6.1",
"gulp-cssmin": "0.2.0",
"gulp-uglify": "3.0.0",
"gulp-filter": "5.1.0",
"gulp-watch": "5.0.0",
"rimraf": "2.6.2",
"jquery": "3.3.1",
"bootstrap": "4.1.1",
"popper.js": "1.14.3"
}
}
После сохранения файла папка будет добавлена в каталог проекта с именем node_modules (эта папка не отображается, если вы не активируете "Показать все файлы" на панели инструментов Solution Explorer.
Эта папка содержит все библиотеки и их зависимости, мы будем использовать gulp для копирования библиотек, которые вы хотите включить, из node_modules в вашу папку wwwroot.
Настройка Gulp
- Создайте еще две папки в корне вашего проекта, назовите один стили и другие скрипты.
Вы можете использовать эти папки для своих сценариев приложений и стилей, мы будем использовать gulp для объединения, минимизации и копирования в папку wwwroot всех этих ресурсов.
Идея состоит в том, чтобы избежать использования папки wwwroot напрямую, чтобы вы полностью контролировали то, что вы раскрываете, и как публиковать свой сайт.
- Добавьте файл javascript в корень вашего проекта и назовите его gulpfile.js
Вы можете использовать gulp для создания различных задач, которые могут выполняться автоматически до или после сборки, при очистке проекта, когда проект открыт в Visual Studio и т.д....
В этом примере я создам следующие задачи:
- clean: js, чтобы очистить все файлы в папке wwwroot/js.
- clean: css, чтобы очистить все файлы css в вашей папке wwwroot/css.
- очистить для очистки: js и очистить: css один за другим.
- следить за изменениями в вашем приложении и файлах стилей, поэтому всякий раз, когда вы их сохраняете, ресурсы регенерируются в wwwroot.
- dev: js для генерации ресурсов JavaScript javascript во время разработки.
- dev: css для генерации ресурсов wwwroot css во время разработки.
- dev для выполнения dev: js и dev: css один за другим.
- min: js для генерации ресурсов ресурса wwwroot во время производства.
- min: css для генерации ресурсов wwwroot css во время производства.
- мин для выполнения min: js и min: css один за другим.
В Gulp есть много плагинов, вам нужно указать, какие из них необходимы для вашего проекта, чтобы сделать это, добавьте следующее в начале вашего скрипта:
/// <binding BeforeBuild='clean, dev, min' Clean='clean' ProjectOpened='watch' />
"use strict";
var gulp = require("gulp"),
rimraf = require("rimraf"),
concat = require("gulp-concat"),
cssmin = require("gulp-cssmin"),
uglify = require("gulp-uglify"),
gulpFilter = require("gulp-filter");
Поскольку вы можете вычесть из имени, плагин gulp gulp-filter
- это то, что мы будем использовать, чтобы исключить файлы из процесса минимизации.
Теперь вам нужно настроить некоторые общие пути:
var paths = {
webroot: "./wwwroot/",
scripts: "./Scripts/",
styles: "./Styles/",
node_modules: "./node_modules/"
};
//The following paths will be used to look for any js and css file in your Script and Styles folder or any subfolder inside them
paths.scripts = paths.scripts + "**/*.js";
paths.styles = paths.styles + "**/*.css";
Примечание: если вам нужно указать порядок любого скрипта внутри этих папок, вы можете сделать следующее:
paths.scripts = [paths.scripts + "/somescript.js", paths.scripts + "**/*.js"];
paths.styles = [paths.styles + "/somecss.css", paths.styles + "**/*.css"];
Затем определите пути к сценариям поставщиков, которые находятся внутри папки node_modules:
paths.vendorJs = [paths.node_modules + "jquery/dist/jquery.js",
paths.node_modules + "popper.js/dist/umd/popper.js",
paths.node_modules + "bootstrap/dist/js/bootstrap.js"];
paths.vendorCss = [paths.node_modules + "bootstrap/dist/css/bootstrap.css"];
paths.minVendorJs = [paths.node_modules + "jquery/dist/jquery.min.js",
paths.node_modules + "jquery/dist/umd/popper.min.js",
paths.node_modules + "bootstrap/dist/js/bootstrap.min.js"];
paths.minVendorCss = [paths.node_modules + "bootstrap/dist/css/bootstrap.min.css"];
Идея состоит в том, чтобы избежать минимизации для любого файла, который указан в paths.minVendorJs
поскольку они уже минимизированы. Следующий путь позволит вам минимизировать любой конкретный файл поставщика, если вам нужно это сделать:
paths.vendorCssToMinify = [paths.node_modules + "perfect-scrollbar/css/perfect-scrollbar.css"]
Затем мы определяем выходные файлы, которые будут сгенерированы, для этого примера будет создан только один скрипт и один стиль, содержащий все файлы приложений, а также все файлы поставщиков, объединенные в них:
paths.concatJsDest = paths.webroot + "js/application.js";
paths.concatCssDest = paths.webroot + "css/application.css";
paths.minConcatJsDest = paths.webroot + "js/application.min.js";
paths.minConcatCssDest = paths.webroot + "css/application.min.css";
Наконец, мы определяем каждую задачу:
gulp.task("clean:js", function (cb) {
rimraf(paths.webroot + "js/**/*.js", cb);
});
gulp.task("clean:css", function (cb) {
rimraf(paths.webroot + "css/**/*.css", cb);
});
gulp.task("clean", ["clean:js", "clean:css"]);
gulp.task('watch', function () {
gulp.watch(paths.styles, ['dev:css', 'clean:css']);
gulp.watch(paths.scripts, ['dev:js', 'clean:js', ]);
});
gulp.task("dev:js", function () {
return gulp.src(paths.vendorJs.concat(paths.scripts))
.pipe(concat(paths.concatJsDest))
.pipe(gulp.dest('.'));
});
gulp.task("dev:css", function () {
return gulp.src(paths.vendorCss.concat(paths.styles))
.pipe(concat(paths.concatCssDest))
.pipe(gulp.dest('.'));
});
gulp.task("min:js", function () {
// Files to skip from minification.
var filter = gulpFilter(paths.minVendorJs, {
restore: true
});
return gulp.src(paths.minVendorJs.concat(paths.scripts))
.pipe(filter)
.pipe(uglify())
.pipe(filter.restore)
.pipe(concat(paths.minConcatJsDest))
.pipe(gulp.dest("."));
});
gulp.task("min:css", function () {
// Files to skip from minification.
var filter = gulpFilter(paths.minVendorCss, {
restore: true
});
return gulp.src(paths.minVendorCss.concat(paths.vendorCssToMinify).concat(paths.styles))
.pipe(filter)
.pipe(cssmin())
.pipe(filter.restore)
.pipe(concat(paths.minConcatCssDest))
.pipe(gulp.dest("."));
});
gulp.task("dev", ["dev:js", "dev:css"]);
gulp.task("min", ["min:js", "min:css"]);
И это!
Чтобы проверить конфигурацию, щелкните правой кнопкой мыши на файле gulpfile.js и выберите " Проводник запуска задач". Если все пойдет правильно, вы должны увидеть что-то вроде этого:
Вы можете запускать задачи, дважды щелкнув их.
Вы можете использовать сгенерированные ресурсы в виде бритвы, например:
<environment include="Development">
<link rel="stylesheet" href="~/css/application.css" />
</environment>
<environment exclude="Development">
<link rel="stylesheet" href="~/css/application.min.css" />
</environment>
А также
<environment include="Development">
<script src="~/js/application.js"></script>
</environment>
<environment exclude="Development">
<script src="~/js/application.min.js"></script>
</environment>
Если вам нужно скомпилировать файлы LESS или SASS, вам необходимо использовать соответствующий плагин Gulp, см. Здесь пример.
Дополнительная информация об использовании Gulp в ядре ASP.NET: https://docs.microsoft.com/en-us/aspnet/core/client-side/using-gulp?view=aspnetcore-2.0