我目前正在开发一个项目,该项目使用ASP.NET Web Optimization库(v 1.1.0-Beta1)和Bundle Transformer扩展(v 1.7.3-Beta1用于核心,1.7.0-Beta1用于LESS)用于将LESS转换为CSS.基于Web搜索,CSS(及更少)中的路径似乎是一个常见问题,在大多数情况下,建议手动修改CSS并完成它.但是,由于我们的开发和生产环境之间的差异,并且没有拥有受影响的CSS,这样的解决方案是不可行的.
似乎存在两种解决方案.第一种是将捆绑定义的虚拟目录覆盖在包含内容的实际目录上.对我来说,这似乎是一个糟糕的选择.
其次,我选择的路线是使用IItemTransform这样的CssRewriteUrlTransform(在这篇文章中提到.即使这个解决方案也有它的局限性.因此我试图编写自己的ItemTransformer但是看起来它的执行结果被忽略了以下列方式使用时:
public static void RegisterBundles(BundleCollection bundles)
{
/* among other work pass in IItemTransformer to fix paths */
var styleBundle = new StyleBundle("~/bundles/css/styles")
.Include(...)
.Include("~/Content/less/font-awesome.less", new RewriteUrlTransform())
.Include(...);
styleBundle.Transforms.Add(new CssTransformer());
styleBundle.Orderer = new NullOrderer();
bundles.Add(styleBundle);
}
Run Code Online (Sandbox Code Playgroud)
IItemTransform的实现:
public class RewriteUrlTransform : IItemTransform
{
public string Process(string includedVirtualPath, string input)
{
return (input manipulated with proper path replacing …Run Code Online (Sandbox Code Playgroud) web-optimization asp.net-mvc-4 bundling-and-minification asp.net-optimization bundletransformer
我将一个项目从asp.net 3.5升级到4.5,以便使用脚本捆绑和javascript的缩小.现在我把它全部运行了,脚本都出现在我定义的包中但是它们没有在一个脚本中"捆绑"在一起而且它们没有缩小.
继承人我拥有的......
default.aspx包含:
<asp:ScriptManager
ID="scriptmanager"
LoadScriptsBeforeUI="false"
runat="server"
ScriptMode="Release"
EnableScriptLocalization="false"
>
<Scripts>
<%--Framework Scripts--%>
<asp:ScriptReference Path="~/bundles/MyBundle" ScriptMode="Release"/>
<%--Site Scripts--%>
</Scripts>
</asp:ScriptManager>
Run Code Online (Sandbox Code Playgroud)
Global.asax中的Application_Start:
BundleTable.EnableOptimizations = true;
BundleConfig.RegisterBundles(BundleTable.Bundles);
Run Code Online (Sandbox Code Playgroud)
BundleConfig.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Optimization;
namespace MyNameSpace
{
public class BundleConfig
{
// For more information on Bundling, visit http://go.microsoft.com/fwlink/?LinkId=254726
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new ScriptBundle("~/bundles/MyBundle").Include(
"~/Scripts/WebForms/WebForms.js",
"~/Scripts/WebForms/MSAjax/MicrosoftAjax.js",
"~/Scripts/WebForms/MSAjax/MicrosoftAjaxWebForms.js",
"~/Scripts/WebForms/TreeView.js",
"~/Scripts/WebForms/Focus.js",
"~/Scripts/WebForms/MenuStandards.js"));
}
}
}
Run Code Online (Sandbox Code Playgroud)
我甚至在web.config中关闭了调试,即使我尝试在scriptmanager中强制释放模式以及脚本引用.
<compilation debug="false" batch="true" targetFramework="4.5">
Run Code Online (Sandbox Code Playgroud)
输出仍然是几个引用:
<script src="/MyProj/WebResource.axd?d=pynGkmcFUV13He1Qd6_TZA6EiyQ1YRW47qIzscWLzWU7jP_7DjoC2XbU7kCBkgYcJdoeAwqaVpUMnbWRsvhdMw2&t=634896541540000000" type="text/javascript"></script>
<script src="/MyProj/ScriptResource.axd?d=zvkqIRNUspAvS1yKeFhMb4kS_IY-Q_9Yn_KOfmzKLnliETz8uip5T2BUr1JOPE4XV1bmnifY3Eg8vrX8bPLYT71P0Kf8DwEcoRw5fj2tqHdQSorRXVpasfsMXeJLHbT_alkHjf2wIrgxLzxYvocKIA2&t=12e197aa" …Run Code Online (Sandbox Code Playgroud) 目前我正在试图安装一个项目,以实现对JavaScript文件的定位(如描述在这里),但在同一时间,我想捆绑,然后再缩小在项目中的JavaScript.我在这里关注了捆绑和缩小的教程
我已经能够让两者分开工作,但是当我试图让它们一起工作时,我无法使本地化正常工作.我认为这是因为捆绑为它生成的捆绑/缩小的javascript创建了它自己的路由处理,所以我在webconfig中定义的httpHandler被忽略了.我一直收到javascript错误,说"CustomTranslate未定义".
我试图这样做是因为我们正在使用ExtJS构建一些控件,但我们需要能够将本地化应用于这些控件.关于如何让他们一起工作的任何帮助/想法将不胜感激.
我没有使用MVC,而是在Visual Studio 2012中的asp.net中执行此操作.
这是我的代码:
BundleConfig.cs
namespace TranslationTest
{
public class BundleConfig
{
public static void RegisterBundles(BundleCollection bundles)
{
//default bundles addeed here...
bundles.Add(new ScriptBundle("~/bundles/ExtJS.axd").Include("~/Scripts/ExtJS/ext-all.js", "~/Scripts/ExtJS/TestForm.js"));
}
}
}
Run Code Online (Sandbox Code Playgroud)
web.config中:
<globalization uiCulture="auto" />
<httpHandlers>
<add verb="*" path="/bundles/ExtJS.axd" type="TranslationTest.ScriptTranslator, TranslationTest" />
</httpHandlers>
Run Code Online (Sandbox Code Playgroud)
Default.aspx的
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="TranslationTest._Default" %>
<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">
<script src="/bundles/ExtJS.axd"></script>
</asp:Content>
Run Code Online (Sandbox Code Playgroud)
TestForm.js:
Ext.require([
'Ext.form.*',
'Ext.layout.container.Column',
'Ext.tab.Panel'
]);
Ext.onReady(function () {
Ext.QuickTips.init();
var bd = …Run Code Online (Sandbox Code Playgroud) javascript asp.net localization httphandler bundling-and-minification
我正在使用BundleTransformer缩小css和js资源
<yui>
<css compressionType="Standard" removeComments="true" lineBreakPosition="-1" />
<js compressionType="Standard" obfuscateJavascript="true" preserveAllSemicolons="false" disableOptimizations="false" ignoreEval="false" severity="0" lineBreakPosition="-1" encoding="UTF8" threadCulture="en-us" />
</yui>
Run Code Online (Sandbox Code Playgroud)
正如你所看到的那样css可以指定removeComments="true"
但是js没有这样的选择.
我认为YUI js压缩器默认删除注释.是的,有点删除,但它仍然留下这样的评论:
/* NUGET: BEGIN LICENSE TEXT
*
*Bla bla bla
*
* NUGET: END LICENSE TEXT */
/*!
* Bla
* Licensed under http://www.apache.org/licenses/LICENSE-2.0
*/
Run Code Online (Sandbox Code Playgroud)
看起来没有办法强迫YIU js minifier删除评论.
https://github.com/yui/yuicompressor:
以/*开头的C风格评论!保存完好.这对包含版权/许可证信息的评论很有用
有没有什么我可以通过使用BundleTransformer完全删除捆绑的缩小输出文件中的所有类型的注释?谷歌页面速度强烈建议我这样做.
javascript yui-compressor bundling-and-minification bundletransformer asp.net-mvc-5
我一直在寻找使用ASP.NET优化框架和UseCDN = true并且HashContent Number附加到Bundles的URI的任何示例或引用.不幸没有运气.以下是我的代码的简化示例.
我的捆绑代码非常简单
bundles.UseCdn = true;
BundleTable.EnableOptimizations = true;
var stylesCdnPath = "http://myCDN.com/style.css";
bundles.Add(new StyleBundle("~/bundles/styles/style.css", stylesCdnPath).Include(
"~/css/style.css"));
Run Code Online (Sandbox Code Playgroud)
我从Master页面调用Render
<%: System.Web.Optimization.Styles.Render("~/bundles/styles/style.css")%>
Run Code Online (Sandbox Code Playgroud)
生成的代码是
<link href="http://myCDN.com/style.css" rel="stylesheet"/>
Run Code Online (Sandbox Code Playgroud)
如果我禁用UseCDN
/bundles/styles/style.css?v=geCEcmf_QJDXOCkNczldjY2sxsEkzeVfPt_cGlSh4dg1
Run Code Online (Sandbox Code Playgroud)
当useCDN设置为true时,如何使bunlding添加v =哈希内容?
编辑:
我试过用
<%: System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/bundles/styles/style.css",true)%>
Run Code Online (Sandbox Code Playgroud)
如果CdnUse = true,它仍然不会生成v = hash
我在网上有不同的脚本:
externalurl/INTE /普通/ JS/script1.js
externalurl/INTE /普通/ JS/script2.js
externalurl/INTE //公共/ JS/script3.js
externalurl/INTE //公共/ JS/script4.js
externalurl/INTE //公共/ JS/script15.js
如何在我的解决方案中创建外部JavaScript的javascript包?
bundles.Add(new ScriptBundle("~/bundles/inte").Include(
"http://url/inte/common/js/script1.js",
"http://url/inte/common/js/script2.js",
"http://url/inte/common/js/script2.js));
Run Code Online (Sandbox Code Playgroud) javascript asp.net-mvc bundle asp.net-mvc-4 bundling-and-minification
我在我的mvc应用程序中为脚本和样式创建了bundle.
bundles.Add(new ScriptBundle("〜/ bundles/jquery").Include("〜/ Scripts/jquery-1.*"));
bundles.Add(new StyleBundle("〜/ Content/css").Include("〜/ Content/CSS/abc.css"));
在这种情况下,因为存在一个真实的目录~/Content/CSS,所以存在名称冲突问题,因此它找不到css并且无法应用样式.所以我改变了虚拟路径~/Content/styles/css,它的工作原理.所以我在这里有点困惑,虚拟路径如何在这里工作?
我想我可能需要重新审视这个,出于好奇,如果没有别的.
是否允许从缩小的js和css文件中删除许可证信息,如果这些文件是使用指向未分隔源的源映射生成的,并且所有文件(具有许可证)都可用?
我问,因为当我缩小几个文件时,我发现我无法减少的大部分大小来自于携带所有许可证信息.我可以看到,对于浏览器功能和下载,可能只使用最小的缩小源,但该文件只能由浏览器使用来呈现.如果打开控制台,将下载源映射以将查询用户指向未经授权的源,并保留原始许可证完整且可根据请求提供的要求.
具体来说,Apache License 2.0(http://www.apache.org/licenses/LICENSE-2.0),MIT许可证(http://en.wikipedia.org/wiki/MIT_License)和GPLv2(https:// www.gnu.org/licenses/gpl-2.0.html)开始.
javascript css bundling-and-minification source-maps copyright-display
设置:
我有一个使用许多JavaScript文件的大型SPA应用程序,这些文件使用Visual Studio 2013中的Web Essentials捆绑捆绑在一起.然后,我在我的HTML页面上包含Web Essentials生成的缩小的js文件.此应用程序不使用ASP.NET
问题:
我希望能够分发HTML页面,其中包含为生产引用的单个缩小脚本,但是用于开发的单个未明确脚本.
原因:
即使使用地图文件,缩小的脚本也很难调试.变量和参数名称已缩小,因此调试器与源不匹配.此外,由于所有内容都在一个文件中,因此很难查看开发.
当前解决方案
我有一个咕噜咕噜的任务进入我的html文件并修改它,以便<script>替换标签.这与我添加到页面的每个文件一起增长.
Web Essentials是否提供了比我目前正在做的更好的解决方案,我可能会忽略它?
javascript visual-studio bundling-and-minification web-essentials
我使用VS Express for web创建了一个MVC应用程序.它只会使用VS Express附带的默认内置CSS文件.
示例:如果我修改bootstrap.css文件(更改jumbotron颜色),并从VS本地运行,则更改很明显,但是当我进行Web部署时,这些更改都不明显.我还注意到当我将web.config文件修改为Debug = false时,当我从VS本地运行(以及在Web部署中)时,我所做的CSS更改并不明显.
CSS仍在应用,但我所做的任何更改都不会应用.该网站显示旧的默认jumbotron颜色.如果我在web.config中更改debug = true,那么jumbotron会显示我更新的颜色.当我在网站上部署我的网站时,没有应用任何CSS更改,它仍然使用默认的CSS文件,我甚至在服务器上检查了bootstrap.css,它显示了更新的jumbotron颜色,但是jumbotron仍然是网络上的默认颜色?? 超级混乱.
我做了很多阅读,尝试将以下内容添加到我的web.config中:
<remove name="BundleModule" />
<add name="BundleModule" type="System.Web.Optimization.BundleModule" />
Run Code Online (Sandbox Code Playgroud)
但这并没有解决它.我尝试从我的文件名中删除.css,这解决了当我使用debug = false从VS本地运行它时的问题,但是当我发布网站时,网站根本没有显示CSS样式.这不是缓存问题.它与bundle和debug = false有关,但我不知道是什么.我对web/MVC开发还很陌生.我用NuGet更新了我的web.optimization和microsoft.aspnet等.
我有一个非常艰难的时间,如果有人有一个建议,它的工作,我会很高兴!Stack Overflow上有很多关于此的帖子,但这些建议都没有对我有用.
这是我的bundle.config.cs:
using System.Web;
using System.Web.Optimization;
namespace HFHYYC
{
public class BundleConfig
{
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
"~/Scripts/jquery-{version}.js"));
bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
"~/Scripts/jquery.validate*"));
bundles.Add(new ScriptBundle("~/bundles/modernizr").Include(
"~/Scripts/modernizr-*"));
bundles.Add(new ScriptBundle("~/bundles/bootstrap").Include(
"~/Scripts/bootstrap.js",
"~/Scripts/respond.js"));
bundles.Add(new StyleBundle("~/Content/css").Include(
"~/Content/bootstrap.css",
"~/Content/site.css"));
}
}
}
Run Code Online (Sandbox Code Playgroud) css asp.net-mvc visual-studio twitter-bootstrap bundling-and-minification
javascript ×5
asp.net-mvc ×4
asp.net ×3
css ×2
bundle ×1
c# ×1
httphandler ×1
localization ×1
optimization ×1
source-maps ×1