【问题标题】:Grunt tasks stuck in endless loopGrunt 任务陷入无限循环
【发布时间】:2015-08-21 15:45:12
【问题描述】:

正在为一些即将进行的项目建立一个基础Gruntfile.js。从一台新电脑开始,所以一切都是全新的。使用 Homebrew 安装 Node 和 NPM,然后全局安装 Grunt,以及在我的本地目录中。

这是我的package.json

{
  "name": "timespent-prototype",
  "version": "0.1.0",
  "devDependencies": {
    "assemble": "0.4.37",
    "bower": "^1.4.1",
    "grunt": "^0.4.5",
    "grunt-contrib-concat": "^0.5.1",
    "grunt-contrib-sass": "^0.9.2",
    "grunt-contrib-watch": "^0.6.1",
    "grunt-newer": "^1.1.0",
    "grunt-wiredep": "^2.0.0"
  }
}

这是我的Gruntfile.js

module.exports = function(grunt) {

  // Project configuration.
  grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),

    concat: {
      vendor: {
       src: ['vendor/**/*.min.js'],
       dest: 'build/javascripts/library.js',
      }
    },

    // Takes your scss files and compiles them to css
    sass: {
      dist: {
        options: {
          style: 'expanded'
        },
        files: {
          'build/stylesheets/application.css': 'app/stylesheets/application/index.scss'
        }
      }
    },

    // Assembles your templates into HTML files
    assemble: {
      options: {
        layoutdir: 'app/views/layouts/',
        partials: ['app/views/partials/*.hbs'],
        flatten: true,
        expand: true
      },
      pages: {
        src: ['app/views/**/*.hbs','!app/views/layouts/*.hbs','!app/views/partials/*.hbs'],
        dest: 'build/'
      }
    },

    wiredep: {
      task: {
        src: ['app/views/layouts/*.hbs']
      }
    },

    // Watches for file changes, runs the default task
    watch: {
      files: ['app/**/*'],
      tasks: ['default'],
      options: {
        // Start another live reload server on port 1337
        livereload: 1337,
      }
    }

  });

  // Load the plugins
  grunt.loadNpmTasks('assemble');
  grunt.loadNpmTasks('grunt-contrib-sass');
  grunt.loadNpmTasks('grunt-contrib-watch');
  grunt.loadNpmTasks('grunt-newer');
  grunt.loadNpmTasks('grunt-contrib-concat');
  grunt.loadNpmTasks('grunt-wiredep');

  // Register the tasks
  grunt.registerTask('default', ['sass','assemble']);
  grunt.registerTask('watch', ['watch']);
  grunt.registerTask('concat', ['concat']);
  grunt.registerTask('wiredep', ['wiredep']);
};

我看到的问题是,对于多个任务,特别是 wiredepconcat,任务会陷入循环并且永远不会结束。运行 grunt concat 并输出如下详细信息:

Registering "grunt-contrib-concat" local Npm module tasks.
Reading /Users/jacksonlynch/projects/timespent-prototype/node_modules/grunt-contrib-concat/package.json...OK
Parsing /Users/jacksonlynch/projects/timespent-prototype/node_modules/grunt-contrib-concat/package.json...OK
Loading "concat.js" tasks...OK
+ concat

Running tasks: concat

Running "concat" task

Running "concat" task

Running "concat" task

Running "concat" task

Running "concat" task

Running "concat" task

Running "concat" task 将继续打印,直到我停止它。正如我在多个插件和任务中看到的那样,这可能是我安装 NPM 或 Grunt 的问题,但我很难调试它。如果有人以前遇到过这种情况,请告诉我有什么帮助!

谢谢!


编辑:针对 Alireza Ahmadi 的评论,这是我的文件结构:

.
|
|_ app/
  |_ assets/
  |_ javascript/
  |_ stylesheets/
  |_ views/
|
|_ build/
  |_stylesheets/
  |_javascripts/
|
|_ vendor/
|_ bower.json
|_ Gruntfile.js
|_ package.json

【问题讨论】:

  • 为什么有些任务的目的地以build开头,而concat任务的目的地以dist开头?您可以共享至少 2 级深度的文件夹结构吗?
  • 感谢您的回复!那只是一个糟糕的复制和粘贴,目标应该始终是build,我更正了它并添加了请求的文件结构。

标签: javascript node.js gruntjs npm grunt-contrib-concat


【解决方案1】:

Gruntfile.js 的最后两行中,您重新声明了concatwiredep 任务,当 grunt 尝试运行您的代码时,它陷入了无限循环,因为 concat 指的是未定义的 concat 任务,所以你应该删除这些行:

grunt.registerTask('concat', ['concat']);
grunt.registerTask('wiredep', ['wiredep']);

一般来说,当你用grunt.initConfig定义一个名为foobar的任务时,它是定义的,不需要使用registerTask注册,可以通过grunt foobar命令访问。

【讨论】:

  • 这就是答案。谢谢阿里雷萨!我没有意识到initConfig 也会为它注册一个任务。非常感谢!
  • 对我来说,我的任务与注册配置名称相同
猜你喜欢
  • 2020-05-13
  • 1970-01-01
  • 2013-03-17
  • 2021-02-15
  • 2022-01-23
  • 2021-01-23
相关资源
最近更新 更多