Как минимизировать файлы в asp.net ядро?

#asp.net-core #asp.net-core-mvc #minify #coreclr

#asp.net-core #asp.net-core-mvc #минимизировать #coreclr

Вопрос:

Документация для asp.net core показывает, как выполнять объединение и минимизацию css и js файлов с помощью grunt или gulp. Однако, когда я создаю проект с использованием vs 2015, он добавляет bundleconfig.json файл в project. Я хочу минимизировать все файлы js внутри папки wwwroot / js. Итак, я обновил существующие строки внутри bundleconfig.json, чтобы использовать подстановочный знак *

 {
    "outputFileName": "wwwroot/js/*.min.js",
    "inputFiles": [
      "wwwroot/js/*.js"
    ],
    // Optionally specify minification options
    "minify": {
      "enabled": true,
      "renameLocals": true
    },
    // Optinally generate .map file
    "sourceMap": false
  }
  

однако, когда я публикую проект, я получаю сообщение об ошибке

Обработка wwwroot/js/*.min.js Недопустимые символы в path. Имя параметра: path

Ответ №1:

По состоянию на март 2021 годарекомендуемый корпорацией Майкрософт подход заключается в использовании пакета WebOptimizer Core nuget, созданного Мадсом Кристенсеном (PM в команде Visual Studio) — https://www.nuget.org/packages/LigerShark .WebOptimizer.Core/

Он не использует bundleConfig.json файлы и предпочитает настройку через запуск.ConfigureServices(), но вы, конечно, можете написать небольшой статический помощник, который возвращает действие и анализирует ваш файл BundleConfig.json с помощью JSON.NET или System.Text.Json, если у вас есть куча пакетов и вы уже потратили время на то, чтобы получить свой json-файл правильным способом. Затем при запуске вы можете предоставить вспомогательное действие для вызова services.AddWebOptimizer(action) .

В WebOptimizer есть помощники тегов, которые помогают добавлять теги <link> и <script> в файлы CSHTML.

Вы можете увидеть подробную информацию о README из его репозитория на GitHub: https://github.com/ligershark/WebOptimizer

Ответ №2:

Я думаю, что вы не можете использовать подстановочные знаки в outputFileName , поэтому используйте здесь абсолютный путь. Для создания нескольких пакетов создайте несколько записей в массиве.

 [
  {
    "outputFileName": "wwwroot/css/site.min.css",
    // An array of relative input file paths. Globbing patterns supported
    "inputFiles": [
      "wwwroot/css/site.css"
    ]
  },
  {
    "outputFileName": "wwwroot/js/site.min.js",
    "inputFiles": [
      "wwwroot/js/site.js"
    ],
    // Optionally specify minification options
    "minify": {
      "enabled": true,
      "renameLocals": true
    },
    // Optinally generate .map file
    "sourceMap": false
  }
]
  

Приведенный выше вариант используется по умолчанию bundleconfig.json .

На заметку:

*.min.js также *.js кстати. Поэтому, если вы не удалите предыдущий, он будет рекурсивно добавляться при каждом объединении, так что будьте осторожны.

Комментарии:

1. при чтении msdn, bundleconfig.json не работает для .net core цитата «ASP.NET Core не предоставляет встроенного решения для объединения и минимизации.» источник learn.microsoft.com/en-us/aspnet/core/client-side /…