2011-07-18 77 views
3
JavaScript文件

我在战略工作在Azure上(ASP.NET Web角色) 存储和部署JavaScript文件我的要求是:策略在Azure上

  1. 要在生产中使用精缩版
  2. 使用在开发环境原始版本(即不精缩)本地版(简化调试)
  3. 简单的构建/部署过程(VS2010)
  4. 简单的更新过程
  5. (我的文件从时间到时间变化)

这里有一个很好的讨论Visual Studio 2010: Publish minified javascript files instead of the original ones但是这没有考虑到Azure可以提供或使用多个实例的好处。

我正在考虑将我缩小的JavaScript文件部署到blob存储并在生产版本中使用这些文件。这些将与一个大的最大年龄缓存控制存储客户端缓存和文件名将存储的版本(所以我可以轻松更新)。我欢迎有关此策略的反馈意见。

因此,在发展中呈现的HTML将指向本地脚本文件,即:

<script src="Scripts/myjavascript-0.0.1.js" type="text/javascript"></script> 

但是产量的结果应使用以下方法来指代的缩小版。

<script src="http://myblob.blob.core.windows.net/Scripts/myjavascript-0.0.1.js" type="text/javascript"></script> 

但我的主要问题是如何最好地实现路径在开发和生产中的自动切换。或者一个自定义处理程序是正常路线(如果是这样的话,将如何工作 - 我不希望每个实例都在每个请求上从blob重新加载)。

回答

4

关于#1 & 2:

我讨论这个here的策略。基本的想法是使用一个辅助函数来发出脚本标签。该功能可以在调试模式下构建到调试文件的链接,另外还可以缩小文件(这也使得用缩小文件在本地进行测试变得容易)。同样的功能可以处理增加了版本为缓存失效的路径等

关于#3:

添加微小作为后生成步骤。我说这个我csproj(这只是一个MSBuild文件),它使用YUI压缩机:分别

<Target Name="AfterBuild" Condition="'$(Configuration)' != 'Debug'"> 
    <!-- remove previous minified files --> 
    <Exec Command="del $(ProjectDir)Styles\*-min.css" /> 
    <Exec Command="del $(ProjectDir)Scripts\*-min.js" /> 
    <!-- Minify javascript and css, unless we're in Debug --> 
    <Exec Command="java -jar $(ProjectDir)..\yuicompressor\build\yuicompressor-2.4.6.jar -o .css$:-min.css --charset utf-8 $(ProjectDir)Styles\*.css" /> 
    <Exec Command="java -jar $(ProjectDir)..\yuicompressor\build\yuicompressor-2.4.6.jar -o .js$:-min.js --charset utf-8 $(ProjectDir)Scripts\*.js" /> 
</Target> 

这将创建一个精缩在〜*-min.js*-min.css文件\脚本和〜\样式。

警告 B/YUI的压缩机的bug in version 2.4.6的C,上述不会如果仅存在一个.css.js文件目录中的工作。

+0

我不能得到这个工作。它在本地运行良好,但是当我将它发布到Azure时,缩小的内容不包含在包中,因为它们不在项目文件中。我该怎么做才能做到这一点? – iboware

1

要从Azure运行时动态切换脚本链接的URL,您应该将所有脚本块放在usercontrol中,并在所有页面中使用该usercontrol。您不应将脚本链接直接放在aspx/master页面上,而应该放在ascx上并使用ascx。这有助于将常用脚本链接保存在单个文件中,并且当您需要进行网站范围更改时,只需更改ascx即可。 另一种方法是使用我的httphandler,它可以相对于绝对地更改脚本的URL,以便从不同站点下载脚本的脚本。您当然可以使用它来预先设置Azure站点的绝对URL。 http://omaralzabir.com/loading_static_content_in_asp_net_pages_from_different_domain_for_faster_parallel_download/

2

您的基本计划听起来不错。它甚至可以使您轻松使用CDN(您只需用CDN路径替换存储帐户的路径)即可。

我不认为我会试着想太多。正如其他地方所建议的,控制是一个好方法。只需使用此控件查找web.config设置,即可获取脚本的根目录并将其前置到脚本的路径中(您的本地版本此设置将为空)。为了确保您不必为每次部署更改配置,我会使用config transformations,因此它会自动发生。