.net核心网络优化器未创建bundle



我正在尝试使用https://github.com/ligershark/WebOptimizer按照微软的建议,为了捆绑和最小化我的js文件,所以按照说明,我在startup.cs:中有以下内容

app.UseWebOptimizer();
app.UseStaticFiles();

在我的服务配置(startup.cs(中:

services.AddWebOptimizer(pipeline =>
{
pipeline.AddJavaScriptBundle("/js/site.js",     // I have tried using MinifyJsFiles (without the use content root) instead of AddJavaScriptBundle
"/lib/jquery-ui-1.13.1.custom/jquery-ui.js",
"/js/auto-complete.js")
.UseContentRoot();
pipeline.MinifyJsFiles(); // I have tried with and without this line
});

在我的布局中:

<script src="~/js/site.js"></script>

但每当我浏览到该页面时,当它试图加载网站.js 时,我在网络选项卡中只收到一个404错误

我错过了什么吗?所有文件都在站点的wwwroot文件夹中的正确位置

验证这些:

您的文件应该在wwwroot目录中的某个位置(如果使用默认配置(

您的文件应该使用";构建操作=内容;(csproj中应该没有任何内容(。

当你写:

pipeline.AddSomethingBundle();

位于wwwroot/main.css的文件将在url/main.css处可用。

当你写:

pipeline.AddSomethingBundle("/site.css", "site.css");

它将要求一个文件位于位置wwwroot/site.css

使用.UseContentRoot()将使任何params(第一个param除外,它是指向虚拟JS束的仅在内存中的路径(相对于JS文件所在的.csproj的内容根

内容根通常是.csproj(Web(项目的根目录,Web文件位于该项目中,例如包含wwwrootControllersModelsViews等。

正常行为是文件路径/globs相对于内容根的wwwroot子文件夹。

因此,如果JS文件在wwwroot中,并且已经进行了.UserContentRoot()调用,那么我们必须相对于.csproj的根引用它们,即

pipeline.AddJavaScriptBundle("/js/site.js",
"wwwroot/lib/jquery-ui-1.13.1.custom/jquery-ui.js",
"wwwroot/js/auto-complete.js").UseContentRoot();

它工作(在我的电脑上,哈哈(。

如果我们想引用wwwroot之外的内容,那么我们所需要做的就是调整相对于内容根的路径。例如

pipeline.AddJavaScriptBundle("/js/site.js",
"lib/jquery-ui-1.13.1.custom/jquery-ui.js",
"node_modules/auto-complete/js/auto-complete.js").UseContentRoot();

第一个URL/param是从网站根目录开始的虚拟(即不作为文件存在(绝对路径(因此您应该在<script>标签中将其称为绝对路径(,这可能毫无价值。

并且,后续的URL/params是相对于wwwroot(默认情况下(或内容根(可能是Web.csproj的根(的

关于:pipeline.MinifyJsFiles();

我最好的理解是,这一行不需要,因为捆绑时的默认行为是缩小捆绑中的所有文件。

相反,当我们想要显式地告诉管道缩小单个JS文件的特定列表时,会使用此调用。然后,当我们在<script>标记中直接引用这些单独的JS文件时,我们收到的响应应该是缩小的版本。

最新更新