Grunt.js 依赖管理

4
有没有一种方法可以在Grunt中指定文件依赖关系?例如,如果我有以下文件:
global/page.jade
project/index.jade -- includes global/page.jade
project/about.jade -- includes global/page.jade
project/test.jade

如果我更改了 global/page.jade,那么我希望能够重新编译 project/index|about.jade。我查看了插件,但没有找到提供此功能的内容。


你正在使用哪个任务? - Allan Kimmer Jensen
绝对不能!我的项目非常需要newer - Даниил Пронин
我认为你应该重新阐述问题:“如何使用grunt-newer重新编译jade依赖项”,如果你需要更新。使用watch可以实现你当前所述的目标,而“newer”的答案是不完整的... - ptim
@memeLab 好的,我会问的。 - Даниил Пронин
好的,我在“newer”存储库的问题中询问了这个问题 https://github.com/tschaub/grunt-newer/issues/44 - Даниил Пронин
显示剩余4条评论
2个回答

5

Grunt的watch插件可以在你的Gruntfile.js中按照以下方式使用:

...

  watch: {
    scripts: {
      files: 'src/**/*',
      tasks: ['buildDevelopment'],
      options: {
        interrupt: true,
      },
    }

grunt.registerTask('buildDevelopment', ['clean'
                        ,'jade'
                        ,'copy:development'
                        ,'bowercopy:development'
                        ]);

...

2
我建议改进Atillas的解决方案。每次更改都重新构建所有模板并不是最优的,对于大型项目来说会让你感到沮丧。
以下是应该有所帮助的内容:


使用更新的插件仅处理更改的文件

安装:npm install grunt-newer --save-dev
文档:https://www.npmjs.org/package/grunt-newer#optionsoverride
用法:

  • 在任务前加上newer:
  • 在gruntfile中添加grunt.loadNpmTasks('grunt-newer');
  • 使用override选项来检查包含的文件(你要寻找的魔法)

newer: { options: { override: function (detail, include) { if (detail.task === 'jade') { checkForModifiedImports(detail.path, detail.time, include); } else { include(false); } } } }



使用 watch 监测文件变化
安装:npm install grunt-contrib-watch --save-dev 文档:https://www.npmjs.org/package/grunt-contrib-watch 用法:
- 在 gruntfile 中添加 grunt.loadNpmTasks('grunt-contrib-watch'); - 任务可以像这样:
watch: { scripts: { files: '**/*.jade', tasks: ['newer:jade'], options: { interrupt: true }, }, }

我在这上面收到了“致命错误:checkForModifiedImports未定义”的提示。使用了gruntfile.coffee - Даниил Пронин
看起来 checkForModifiedImports() 是一个用户定义的函数 - 在更新的、jade 或 less 项目中没有定义(更新的 readme 引用了 less)。我很想看到一个例子! - ptim
好的,我在“newer”存储库的问题中询问了这个问题 https://github.com/tschaub/grunt-newer/issues/44 - Даниил Пронин
你需要自己编写一个函数来完成这个任务。我很快会发布一个例子。 - viktorbezdek
我在Github上找到了一个可行的解决方案,位于某人的[gruntfile.coffee#105](https://github.com/nwalton3/grunt-starter/blob/6992093e3513d67b910fbba81b30132fd0f6792e/Gruntfile.coffee#L105)。它很简单:`if detail.task is 'jadetheninclude true`。它有效。 - Даниил Пронин

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接