在docker容器中Grunt服务最大调用堆栈错误



在docker容器中运行grunt server会导致节点崩溃(没有更好的术语)

(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

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

 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上发现了相关问题,但解决方案似乎不能解决我的问题。

谢谢!

当我的Gruntfile.js有以下代码时,我遇到了这个错误:

grunt.registerTask('svgmin', ['svgmin']);
我通过将代码重命名为: 来解决这个问题。
grunt.registerTask('s', ['svgmin']);

代码的问题是它创建了一个名为'svgmin'的新任务来运行'svgmin'任务,从而导致无限循环。

希望能有所帮助。

最新更新