grunt服务于docker container max调用堆栈错误

时间:2014-08-05 19:26:18

标签: node.js gruntjs yeoman docker

在docker容器中运行grunt服务会导致节点崩溃(缺少更好的术语)。

(node) warning: Recursive process.nextTick detected. This will break in the next version of node. Please use setImmediate for recursive deferral.

 util.js:35
 var str = String(f).replace(formatRegExp, function(x) {
                  ^
 RangeError: Maximum call stack size exceeded

当我在本地运行app *时,它按预期工作。只有*在容器中运行时才会发生*。我的猜测是,它是实时重新加载或导致问题的其他端口映射之一,但我不知道如何调试它。我公开了dockerfile中节点使用的端口:

 EXPOSE 9000 9001 35729

......笨拙的任务......

 grunt.registerTask('serve', 'Compile then start a connect web server', function (target) {
if (target === 'dist') {
  return grunt.task.run(['build', 'connect:dist:keepalive']);
}

grunt.task.run([
  'clean:server',
  'wiredep',
  'concurrent:server',
  'autoprefixer',
  'connect:livereload',
  'watch'
]);
 });


clean: {
  dist: {
    files: [{
      dot: true,
      src: [
        '.tmp',
        '<%= yeoman.dist %>/{,*/}*',
        '!<%= yeoman.dist %>/.git*'
      ]
    }]
  },
  server: '.tmp'
},
wiredep: {
  options: {
    cwd: '<%= yeoman.app %>'
  },
  app: {
    src: ['<%= yeoman.app %>/index.html'],
    ignorePath:  /\.\.\//
  }
},
concurrent: {
  server: [
    'copy:styles'
  ],
  test: [
    'copy:styles'
  ],
  dist: [
    'copy:styles',
    'imagemin',
    'svgmin'
  ]
},
autoprefixer: {
  options: {
    browsers: ['last 1 version']
  },
  dist: {
    files: [{
      expand: true,
      cwd: '.tmp/styles/',
      src: '{,*/}*.css',
      dest: '.tmp/styles/'
    }]
  }
},
watch: {
  bower: {
    files: ['bower.json'],
    tasks: ['wiredep']
  },
  js: {
    files: ['<%= yeoman.app %>/scripts/{,*/}*.js'],
    tasks: ['newer:jshint:all'],
    options: {
      livereload: '<%= connect.options.livereload %>'
    }
  },
  jsTest: {
    files: ['test/spec/{,*/}*.js'],
    tasks: ['newer:jshint:test', 'karma']
  },
  styles: {
    files: ['<%= yeoman.app %>/styles/{,*/}*.css'],
    tasks: ['newer:copy:styles', 'autoprefixer']
  },
  gruntfile: {
    files: ['Gruntfile.js']
  },
  livereload: {
    options: {
      livereload: '<%= connect.options.livereload %>'
    },
    files: [
      '<%= yeoman.app %>/{,*/}*.html',
      '.tmp/styles/{,*/}*.css',
      '<%= yeoman.app %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}'
    ]
  }
},
....

我发现了有关stackoverflow的相关问题,但解决方案似乎无法解决我的问题。

谢谢!

1 个答案:

答案 0 :(得分:0)

当我的Gruntfile.js具有以下代码时遇到此错误:

grunt.registerTask('svgmin', ['svgmin']);

我通过将代码重命名为:

来解决问题
grunt.registerTask('s', ['svgmin']);

代码的问题在于它创建了一个名为&#39; svgmin&#39;运行&#39; svgmin&#39;导致无限循环的任务。

希望它有所帮助。