在一个简单的ASP.Net MVC4测试应用程序中,我安装了无点的NuGet包和followed this tutorial。
我的.less
个文件被正确解析为CSS,并在debug=true
时正常工作。
<link href="/Public/less/main.less" rel="stylesheet"/>
<link href="/Public/less/home.less" rel="stylesheet"/>
<link href="/Public/less/a.less" rel="stylesheet"/>
<link href="/Public/less/b.less" rel="stylesheet"/>
<link href="/Public/less/c.less" rel="stylesheet"/>
然而,当我设置debug=false
以使其缩小并合并到单个样式表时,我得到了这个:
<link href="/Public/less?v=" rel="stylesheet"/> // NOT WORKING!
这是我的捆绑配置文件;再次,直接从教程中获取:
public class BundleConfig
{
// For more information on Bundling, visit http://go.microsoft.com/fwlink/?LinkId=254725
public static void RegisterBundles(BundleCollection bundles)
{
// Compile .less files and create a bundle for them.
var lessBundle = new Bundle("~/Public/less").Include(
"~/Public/less/main.less",
"~/Public/less/home.less",
"~/Public/less/a.less",
"~/Public/less/b.less",
"~/Public/less/c.less");
lessBundle.Transforms.Add(new LessTransform());
lessBundle.Transforms.Add(new CssMinify());
bundles.Add(lessBundle);
}
}
在我的布局文件中:
<head>
@Styles.Render("~/Public/less")
</head>
这是我的LessTransform课程:
public class LessTransform : IBundleTransform
{
public void Process(BundleContext context, BundleResponse response)
{
response.Content = dotless.Core.Less.Parse(response.Content);
response.ContentType = "text/css";
}
}
关于捆绑包在debug=false
无效的原因的任何想法?
答案 0 :(得分:11)
默认情况下,MVC 4.0中的捆绑和缩小在调试模式下是禁用的,因为缩小和捆绑会使调试非常困难甚至有时不可能。您可以通过在LessTransform.Process
方法上设置断点来测试它。 LessTransform.Process
仅在项目与debug = false
或BundleTable.EnableOptimizations = true
一起投放时调用。
<link href="/Public/less?v=" rel="stylesheet"/>
表示捆绑包的结果为空。
请确保至少有一个较少的文件生成CSS内容,如果是,请检查它必须是LessTransform
类:
public class LessTransform : IBundleTransform
{
void IBundleTransform.Process(BundleContext context, BundleResponse response)
{
response.Content = Less.Parse(response.Content);
response.ContentType = "text/css";
}
}
通过将BundleTable.EnableOptimizations = true;
置于RegisterBundles方法中,您可以在调试模式下覆盖优化机制的默认设置(捆绑和缩小),然后您可以调试并检查Less.Parse(response.Content);
的结果
答案 1 :(得分:3)
将.less
编译为css
时,问题是一个无声错误。
我使用断点来检查使用LessTransform
库进行编译的dotless
类。
public class LessTransform : IBundleTransform
{
public void Process(BundleContext context, BundleResponse response)
{
response.Content = Less.Parse(response.Content); // Breakpoint here.
response.ContentType = "text/css";
}
}
我注意到,当鼠标悬停在response.Content
上时,我可以看到我的less
代码,但在Less.Parse
代码之后,response.Content
将变为空。
我通过检查程序运行了less
代码,发现代码中出现语法错误。
一旦我修正了错误,捆绑和缩小就会按预期正常工作。
答案 2 :(得分:0)
除非我误解你所说的内容没有意义。
当你有debug = true
时,你的样式表似乎没有捆绑,因为它们被单独引用,因此没有缩小/捆绑到一个文件中,当debug被设置为true时,这是预期的可以轻松地调试您的脚本/样式,而无需涉及缩小和捆绑的代码。
当你有debug = false
时,似乎会出现缩小/捆绑,因为你只得到两个网址。
看起来很奇怪的一件事是,url不具有与之关联的哈希,即。 v =是空白,这可能需要考虑。
您还可以尝试在浏览器中加载网址<localaddress>/Public/less?v=
,如果在缩小/捆绑时遇到问题,请查看其返回的内容,通常会在文件顶部发出警告。
答案 3 :(得分:0)
看起来你的文件空白少了。所以没有生成哈希是正常的。
就这样你知道。您不需要使用bundle来减少文件。您可以使用import insinde less来组合文件。 @import“a.less”;