【问题标题】:Grunt file output static assets point to specified URLGrunt 文件输出静态资产指向指定的 URL
【发布时间】:2014-06-22 06:12:39
【问题描述】:

在我的索引文件中,我有这样的东西:

<!-- 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 的干净方法是什么?

【问题讨论】:

  • 这是因为您通过 AWS 提供生成的 .js,而页面的其余部分在其他地方?
  • @MattBakaitis 是的,到底发生了什么。
  • ...但是 grunt 不会将文件推送到 AWS 并且 AWS 路径将保持不变,但文件名除外。对吗?
  • 正确,我将使用另一个构建脚本将文件获取到 aws,或者像现在一样手动移动它。

标签: javascript static gruntjs


【解决方案1】:

根据我们在 cmets 中的讨论,在 grunt-usemin 是否有效之后,您有两个通用选项。

1) 从 shell 中查找和替换。

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

<!-- 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 的查找和替换插件,但根据 npmjs.org,grunt-string-replace 似乎使用最多。

这与第一个选项并没有太大区别。

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

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

【讨论】:

  • 使用grunt.filerev.summary 哈希而不是正则表达式会更健壮。
  • 我不经常使用 grunt,所以回到我知道并在类似情况下使用过的东西。如果您有类似的工作示例,我将不胜感激。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-10
  • 2019-09-09
  • 1970-01-01
  • 2020-01-19
  • 2015-10-05
  • 2019-08-08
  • 2013-01-20
相关资源
最近更新 更多