我正在尝试使用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文件位于该项目中,例如包含wwwroot
、Controllers
、Models
、Views
等。
正常行为是文件路径/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文件时,我们收到的响应应该是缩小的版本。