javascript - Grunt 文件输出静态资源指向指定的 URL

标签 javascript static gruntjs

在我的索引文件中,我有这样的内容:

<!-- build:js({.tmp,app}) scripts/main.js -->
    <script src="scripts/foo.js"></script>
    <script src="scripts/bar.js"></script>
<!-- endbuild -->

然后输出到我的 dist,如下所示:

<script src="scripts/cce9cd3a.main.js"></script>

我想做的是修改 dist 的渲染方式,使其显示如下内容:

<script src="https://s3.amazonaws.com/etc/etc/static/scripts/cce9cd3a.main.js"></script>

我的想法是我希望它以相同的方式输出到 dist 文件夹,我将其移至 s3。使用 grunt 将所有静态资源添加到同一个静态服务 URL 之前的干净方法是什么?

最佳答案

根据我们在评论中进行的讨论,在 grunt-usemin 起作用后,您有两个常规选项。

1) 从 shell 中查找并替换。

如果您使用带有 grep 和类似工具的 *nix 系统,您可以将该文件放在易于 grep 和替换的位置。例如,您可以将构建 block 更改为:

<!-- build:js({.tmp,app}) awsreplacepath/main.js -->
    <script src="scripts/foo.js"></script>
    <script src="scripts/bar.js"></script>
<!-- endbuild -->

所以你会得到类似的东西:

<script src="awsreplacepath/cce9cd3a.main.js"></script>

然后使用 grep-and-replace shell 脚本(如这些问题中讨论的脚本)将 awsreplacepath 替换为要引用的路径。

2) 在 grunt 完成之前查找并替换。

有一些用于 grunt 的查找和替换插件,但是 grunt-string-replace根据 npmjs.org,似乎使用率最高。

这与第一个选项没有太大不同。

在这两种情况下,正则表达式都应该很简单,因为您可以选择一个本质上肯定是唯一的字符串...因此您只需将“awsreplacepath”之类的内容放入正则表达式即可。

...只需记住,您需要移动的 usemin 生成的 main.js 文件仍位于 awsreplacepath 目录中。我们所做的只是更改 HTML,以防止您必须自己编辑文件。

关于javascript - Grunt 文件输出静态资源指向指定的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23481010/

相关文章:

javascript - Grunt "watch"警告 : Path must be a string. 收到未定义

javascript - Grunt require 未能按预期创建多个模块

javascript - 无法读取未定义的属性 'name'。购物车

javascript - 通过 json 结果在输入下附加表单验证消息

javascript - Node 中的 MVC 和一般 : How are models tied to views?

Java Class.forName() 与 Thread.currentThread().getContextClassLoader().loadClass()

static - 在 symfony 2.2 twig 中访问静态变量

swift - 我什么时候应该使用协议(protocol)来替换静态函数

javascript - 获得Fancybox与Plone的News Item image合作

ember.js - 结合使用grunt Handlebars 和 Ember ,将模板拆分为单独的文件