首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MVC4 Less捆绑包@导入目录

MVC4 Less捆绑包@导入目录
EN

Stack Overflow用户
提问于 2012-03-07 06:55:23
回答 6查看 23.4K关注 0票数 52

我尝试使用MVC4捆绑来分组我的一些较少的文件,但它看起来我正在使用的导入路径是关闭的。我的目录结构是:

代码语言:javascript
复制
static/
    less/
        mixins.less
        admin/
            user.less

在user.less中,我尝试使用以下命令导入mixins.less:

代码语言:javascript
复制
@import "../mixins.less";

以前在使用chirpy和dotless时,这对我很有效,但现在我注意到ELMAH对我很生气,说:

代码语言:javascript
复制
System.IO.FileNotFoundException: 
    You are importing a file ending in .less that cannot be found.
File name: '../mixins.less'

我是不是应该对MVC4使用不同的@import

一些附加信息

下面是我尝试使用的更少的类和global.asax.cs代码:

LessMinify.cs

代码语言:javascript
复制
...
public class LessMinify : CssMinify
{
    public LessMinify() {}

    public override void Process(BundleContext context, BundleResponse response)
    {
        response.Content = Less.Parse(response.Content);
        base.Process(context, response);
    }
}
...

Global.asax.cs

代码语言:javascript
复制
...
DynamicFolderBundle lessFB = 
    new DynamicFolderBundle("less", new LessMinify(), "*.less");
    
BundleTable.Bundles.Add(lessFB);

Bundle AdminLess = new Bundle("~/AdminLessBundle", new LessMinify());
...
AdminLess.AddFile("~/static/less/admin/user.less");
BundleTable.Bundles.Add(AdminLess);
...
EN

回答 6

Stack Overflow用户

发布于 2012-11-01 01:38:21

Ben Cull回答的附录:

我知道这“应该是对Ben Cull的帖子的评论”,但它增加了一点额外的东西,这是不可能在评论中添加的。所以如果你一定要投我的票的话。或者让我关门。

Ben的博客文章做了所有的事情,除了它没有指定缩小。

因此,按照本的建议安装BundleTransformer.Less包,然后,如果您想要最小化您的css,请执行以下操作(在~/App_Start/BundleConfig.cs中):

代码语言:javascript
复制
var cssTransformer = new CssTransformer();
var jsTransformer = new JsTransformer();
var nullOrderer = new NullOrderer();

var css = new Bundle("~/bundles/css")
    .Include("~/Content/site.less");
css.Transforms.Add(cssTransformer);
css.Transforms.Add(new CssMinify());
css.Orderer = nullOrderer;

bundles.Add(css);

添加的行是:

代码语言:javascript
复制
css.Transforms.Add(new CssMinify());

CssMinifySystem.Web.Optimizations中的位置

我松了一口气,绕过了@import问题,并且没有找到扩展名为.less的结果文件,我不在乎谁投了我的票。

相反,如果你觉得有必要投票支持这个答案,请投票给Ben。

这就是了。

票数 21
EN

Stack Overflow用户

发布于 2013-10-03 06:55:45

我发现一个非常有用的变通方法是在LessMinify.Process()中运行Less.Parse之前设置目录。下面是我是如何做到的:

代码语言:javascript
复制
public class LessTransform : IBundleTransform
    {
        private string _path;

        public LessTransform(string path)
        {
            _path = path;
        }

        public void Process(BundleContext context, BundleResponse response)
        {
            Directory.SetCurrentDirectory(_path);

            response.Content = Less.Parse(response.Content);
            response.ContentType = "text/css";
        }
    }

然后在创建较少的transform对象时传入路径,如下所示:

代码语言:javascript
复制
lessBundle.Transforms.Add(
    new LessTransform(HttpRuntime.AppDomainAppPath + "/Content/Less")
);

希望这能有所帮助。

票数 17
EN

Stack Overflow用户

发布于 2012-03-15 17:56:52

问题是DynamicFolderBundle会读取文件的所有内容,并将组合后的内容传递给LessMinify。

因此,任何@imports都不会引用文件来自的位置。

为了解决这个问题,我不得不将所有“较少”的文件放在一个位置。

然后,您必须了解文件的顺序变得很重要。因此,我开始用一个数字重命名文件(例如:"0 CONSTANTS.less","1 MIXIN.less“,这意味着它们在进入LessMinify之前被加载到组合输出的顶部。

如果您调试您的LessMinify并查看response.Content,您将看到组合较少的输出!

希望这能有所帮助

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9593254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档