Grunt运行任务取决于修改的文件,这可能吗?

时间:2018-08-06 13:03:13

标签: css sass gruntjs task watch

您能帮我解决这个问题吗?

我需要根据修改的文件运行特定任务,例如:

修改:_header.scss
运行: sass:header任务

修改:_footer.scss
运行: sass:页脚任务

修改:_banners.scss
运行: sass:横幅任务

我一直在尝试在保存时获取文件名,以将其用作参数,但是我不知道该怎么做。

我的项目允许更多的人同时工作,但是定义项目的哪个组件将导出到CSS的工作是手动的,因此我试图使该过程自动编译每个模块的最终CSS。

我的问题是如何识别修改后的文件的名称,而不是文件的类型。

非常感谢您!

1 个答案:

答案 0 :(得分:0)

它应该看起来像这样。更改sass文件时,grunt会生成css文件并仅复制(到dist目录)更改的文件。另外,据您所见,connect and watch任务实现了实时重载。

connect: {
  options: {
    port: ...
    livereload: 35729,
    hostname: '127.0.0.1'
  },
  livereload: {
    options: {
      base: [
        'some dist'
      ]
    }
  }
},
// check that files are changed
watch: {
  livereload: {
    options: {
      livereload: '<%= connect.options.livereload %>'
    },
    files: [
      'your dist/*.css'
    ]
  },
  // when sass file is changed, tasks will run
  // newer:copy means that we have to do task copy with changed files only
  sass: {
    files: ['your dir/*.sass'],
    tasks: ['sass', ...some other tasks like cssmin..., 'newer:copy']
  }
},
sass: {
  dist: {
    files: [
       ...sass to css
    ]
  }
},
copy: {
  css: {
    ....
  }
}

您还可能对grunt-changed之类的任务感兴趣。该任务将另一个任务配置为与已更改的src个文件一起运行。有关更多信息,请检查页面grunt-changed