使用grunt-manifest生成appcache清单,其中包含基于根的相关路径

时间:2014-02-12 23:28:42

标签: gruntjs cache-manifest

我有许多主干应用都托管在同一个网站上。我试图使用grunt-manifest为它们生成appcache清单。它生成清单文件,但链接错误。我希望每个应用都有一个单独的清单文件。

例如,假设我有一个名为'hello'的应用程序,它将通过此​​URL访问:

mydomain.com/apps/hello

所以主要的js和css文件位于:

mydomain.com/apps/hello/app.js

mydomain.com/apps/hello/style.css

还有一些共享组件,例如:

mydomain.com/shared/shared.js

(我用require.js动态加载这些,所以不想连接到主app.js)

我像这样在grunt中指定清单:

manifest: {
    generate: {
        options: {
            basePath: '<%= gconf.dist_dir %>/',
            timestamp: true,
            network: ['*'],
        },

        files: [
            { 
                cwd: 'public/',
                src: [
                'apps/hello/*',
                'shared/*',
                // etc
                ],
            dest: '<%= gconf.dist_dir %>/public/apps/hello/manifest.appcache' },
        ]
    }
},

我认为问题在于我正在努力获得grunt-manifest,为站点的一部分而不是根站点生成appcache清单。我得到的清单看起来像这样:

CACHE

apps/hello/app.js
apps/hello/style.css
shared/shared.js

当我加载页面时 - 清单检索失败,因为它试图访问这样的链接:

mydomain.com/apps/hello/apps/hello/app.js

如果我手动编辑清单文件并在所有内容之前添加“/”,那么它看起来像这样:

CACHE

/apps/hello/app.js
/apps/hello/style.css
/shared/shared.js

......然后一切正常。

当我从根目录中想要它们时,问题显然是创建相对链接的清单。

我不能为我的生活弄清楚如何让grunt-manifest为我创造这些,并在前面加上'/'。

我已经尝试了自己的'basePath','cwd'自己,两者的结合。如果我把'/'放在说basePath或cwd的末尾,并尝试在'src'中添加它,它就不起作用了,我得到一个空的CACHE部分。

我确信必须有一种简单的方法来处理咕噜咕噜的模式,但我无法解决这个问题。

有什么想法吗?

(同样 - 没有足够的代表来创建新标签,但'grunt-manifest'标签可能对将来的其他人有用)

1 个答案:

答案 0 :(得分:0)

我刚刚遇到同样的问题。

我在这里分配了模块:https://github.com/killfish/grunt-manifest

如果传入绝对路径选项:true,它将添加'/'

options: {
  **absolutePath: true,**
  network: ['http://*', 'https://*'],
  preferOnline: true,
  verbose: true,
  timestamp: true
},