【问题标题】:grunt faster loading tasks咕哝更快的加载任务
【发布时间】:2013-11-20 07:14:36
【问题描述】:

有没有人可以告诉我如何让 grunt 任务加载得更快。 我真的很想减少加载时间,因为大多数任务需要 1 秒才能加载。

尤其是“监视”任务。当我观察变化时,我真的想更快地编译 sass。

有什么想法吗?

感谢

【问题讨论】:

  • 我不明白为什么这被否决了...

标签: loading gruntjs watch


【解决方案1】:

你真的在寻找这个:jit-grunt

jit-grunt 不会每次都加载所有任务,而是只加载那些必要的任务。

【讨论】:

  • 哇,这真是太棒了!在我的旧机器上至少快 2 倍。
  • 对我来说快了大约 3-4 倍,印象非常深刻。您可以尝试在 grunt 命令上运行 --verbose 以查看 jit-grunt 的帮助。
【解决方案2】:

遇到与 OP 相同的问题:grunt watch 在编译 .less 文件和 liveReload 时非常慢,所以这就是我所做的:

  1. 安装time-grunt 以显示每个任务的执行时间:

    $ npm install --save-dev time-grunt
    

    然后将此行放在模块导出之后:

    module.exports = function(grunt) {
    require('time-grunt')(grunt);
    

    运行 grunt 后,您会注意到哪些任务比其他任务花费的时间更长。就我而言,它正在加载每个文件更改的所有依赖项,所以我找到了这个解决方案:

  2. 安装 jit-grunt 以按需加载依赖项,而不是在每次 grunt 执行任务时加载所有依赖项。

    $ npm install jit-grunt --save-dev
    

    并替换 gruntfile 中的初始加载程序

    require('load-grunt-tasks')(grunt); 
    

    require('jit-grunt')(grunt);
    

这将我的 .css 更新的 liveReload 时间从 ~1600ms 节省到 ~250ms。

PS:@curist 也推荐了jit-grunt,但我认为更多细节可能会对任何人有所帮助。

【讨论】:

    【解决方案3】:

    如果你的 grunt 在 Vagrant virtualbox 中,你可以通过 nfs 同步,这比默认共享要快一点。 (但仍然比本地文件系统慢)

    在你的 Vagrantfile 中:

    config.vm.synced_folder ".", "/vagrant", type: "nfs"
    

    在我的机器上,是时候让 grunt 加载任务了(使用 ssd):

    native:                  ~1s
    nfs:                     ~4s
    default Vagrant sharing: ~16s
    

    【讨论】:

      【解决方案4】:

      同样的问题,更改并执行任务后,所有模块都重新加载了。

      但我在 github 上找到了一个非常好的解决方案 (https://github.com/steida/grunt-este-watch)

      官方的 grunt-contrib-watch 有什么问题?

      由于历史原因,它使用 fs.fileWatch 和 fs.watch 的组合,速度慢而且有问题。从 Node 0.9.2+ 开始, fs.watch 就可以了。

      怎么办?

      1. 安装 grunt-este-watch

        npm install grunt-este-watch --save-dev
        
      2. 更改贡献表

        grunt.loadNpmTasks('grunt-contrib-watch');
        

        为了观看

        grunt.loadNpmTasks('grunt-este-watch');
        
      3. 改变任务

        watch: {
          javascript: {
              files: 'src/js/**/*',
              tasks: ['uglify']
          }
        }
        

        esteWatch: {
           options: {
              dirs: ['../src/**/*']
           },
           'js': function(filepath) { return 'uglify' }
        }
        

      【讨论】:

      • 虽然这可能会回答问题,但it would be preferable 在此处包含答案的基本部分,并提供链接以供参考。
      【解决方案5】:

      听起来您的计算机是这里的问题,您将没有太多选择,只能升级。

      我唯一能想到的就是并发任务,如果你可以同时运行这些任务,你可能会节省一些时间。

      您可以使用grunt-concurrent,如 repo 中所述:

      同时运行 Coffee 和 Sass 等慢速任务可能会显着缩短构建时间。如果您需要同时运行多个阻塞任务(如 nodemon 和 watch),此任务也很有用,如示例配置所示。

      您还可以使用this trick 仅在需要时加载任务。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-06-04
        • 2014-04-15
        • 1970-01-01
        • 1970-01-01
        • 2016-05-22
        • 2016-08-31
        • 1970-01-01
        相关资源
        最近更新 更多