Yeoman/Grunt usemin子文件夹

Cal*_*v J 9 path subdirectory gruntjs yeoman grunt-usemin

我有一个可怕的时间使用yeoman/grunt和usemin - 当我有子文件夹时,试图让输出文件同时在html中编写正确的路径.

我的基本设置是有顶级页面(例如index.html)以及子文件夹中的语言特定页面(en,de,fr等) - 每个页面都有常见的js文件(如jquery)但也有语言特定的js文件(css相同,但保持简单......)

– Gruntfile.js
– app
    |– index.html
    |– js
        jquery.js
            |– en
                english.js
            |– de
                german.js
    |– css
    |– en
        |– index.html
    |– de
        |– index.html
– dist
Run Code Online (Sandbox Code Playgroud)

所以基本上 - 有顶级index.html有jquery等 - 所以那里的脚本标签可能看起来像

<script src="js/jquery.js"></script>
Run Code Online (Sandbox Code Playgroud)

或与转速

<script src="js/123.jquery.js"></script>
Run Code Online (Sandbox Code Playgroud)

但是在en/index.html中,脚本标记应该看起来像(对于常见的 - 比如jquery)

<script src="../js/jquery.js"></script>
Run Code Online (Sandbox Code Playgroud)

或与转速.

<script src="../js/123.jquery.js"></script>
Run Code Online (Sandbox Code Playgroud)

这是../这就是麻烦.

我可以创建js文件但不是rev​​'d,或者rev'd但是空,或者构建和rev'd但是在错误的位置(最常见的是在app和dist文件夹之外/之上!)

在en/index.html中 - 我无法弄清楚构建:js应该是什么样子,例如.

<!-- build:js js/jquery.js -->
<script src="../js/jquery.js"></script>
<!-- endbuild -->

<!-- build:js js/en/english/jquery.js -->
<script src="../js/en/english.js"></script>
<!-- endbuild -->
Run Code Online (Sandbox Code Playgroud)

我已经尝试了我能想到的每一个组合 - 似乎归结为如果我在build:js路径中编写../,那么实际文件从app文件夹放置1级,但写入路径正确的HTML.如果我离开../ out,它将文件放在正确的位置,但是html中没有../(它显然需要) - 所以我怎么说我想要输出文件到引用一级(从en /文件夹中)但有咕噜声没有把它放一级(外面的dist文件夹!)

谢谢!

dea*_*rds 4

我遇到了一个非常相似的问题。我使用他们的静态网站选项在 S3 上托管我的 grunt 生成的网站。在本地,usemin 生成的内容工作正常(使用绝对路径),但由于我将该网站放在 S3 上的存储桶中,因此它需要资产文件的完整绝对路径(包含域)才能实际工作。

输入grunt-replace。使用搜索/替换模式是我发现真正实现这一目标的唯一方法。对我来说,我只需要将“/assets/”替换为“ http://s3domain.com/bucket/site-name/assets/ ”。这是我的 grunt 任务定义:

replace: {
  dist: {
    options: {
      patterns: [
        {
          match: /\/assets\//,
          replacement: 'http://s3domain.com/bucket/site-name/assets/'
        }
      ]
    },
    files: [
      {
        expand: true,
        src: ['dist/**/*.html']
      }
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

我已将其添加到我的deploy任务中,以便它仅在我即将推送到 S3 之前运行。

对于您的情况,您可能可以让它usemin做它的事情,然后仅替换子目录中的文件(例如enes)并更改它们之前的资产路径../