ส่งเสียงฮึดฮัด“ ตรวจพบกระบวนการที่เรียกซ้ำ .nextTick”


89

ฉันใช้ Lion 10.9.2 กับ nodejs v0.10.26

ฉันต้องการตั้งค่าการคอมไพล์อัตโนมัติในไฟล์ sass และรีโหลดแบบสดด้วยคำรามไม่มีอะไรซับซ้อน แต่ ...

เมื่อเรียกใช้grunt watchฉันได้รับข้อผิดพลาดต่อไปนี้

(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

นี่คือ Gruntfile.js

module.exports = function(grunt) {

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

        sass: {
            dist: {
                files: {
                    'assets/css/styles.css': 'assets/sass/styles.scss'
                }
            }
        },
        watch: {
            all: {
                files: 'index.html', // Change this if you are not watching index.html
                options: {
                    livereload: true  // Set livereload to trigger a reload upon change
                }
            },
            css: {
                files:  [ 'assets/sass/**/*.scss' ],
                tasks:  [ 'sass' ],
                options: {
                    spawn: false
                }
            },
            options: {
                livereload: true // Set livereload to trigger a reload upon change
            }
        }

    });

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

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

    grunt.registerTask('default', [ 'sass', 'watch' ]);

};

และนี่คือ package.json

{
  "name": "application",
  "version": "0.0.1",
  "private": true,
  "devDependencies": {
    "grunt": "~0.4.2",
    "grunt-contrib-watch": "~0.5.3",
    "grunt-contrib-sass": "~0.7.3"
  }
}

คำตอบ:


299

ในที่สุดฉันก็พบปัญหาที่คล้ายกันกับ SASS ฉันใช้

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

เคล็ดลับคือ Grunt ดูเหมือนจะไม่ชอบคำซ้ำในชื่อ เมื่อเปลี่ยนมาใช้

grunt.registerTask('styles', [ 'sass']);

ทุกอย่างทำงานได้ตามที่ควร


58
+9000 - นี่เป็นข้อบกพร่องที่โง่เขลาและการแก้ไขของคุณช่วยฉันประหยัดเวลาในการพยายามหาคำตอบ ขอบคุณ!
jkat98

2
ยอดเยี่ยมขอบคุณสำหรับการระบุสิ่งนี้ ฉันรู้ว่าเราไม่จำเป็นต้องลงทะเบียนงานเดียวเพราะคำรามจะเรียกใช้ 'grunt sass' เมื่อคุณพิมพ์ลงในบรรทัดคำสั่ง
stefan

ขอขอบคุณที่แจ้งสิ่งนี้และพบว่าข้อผิดพลาดนี้ไม่เป็นประโยชน์
Kevin Holditch

1
ขอบคุณที่ตอบคำถามนี้ ... ฉันทุบหัวโต๊ะทำงานมาครึ่งชั่วโมงแล้วว่าทำไมgrunt-bower-concatปลั๊กอินถึงให้ผลลัพธ์นั้นแก่ฉัน
Derek

ขอบคุณสำหรับสิ่งนี้. มันทำให้ฉันบ้า!
Michael Giovanni Pumo

17

เพิ่งมีปัญหานี้. แก้ไขได้โดยการลบgrunt.registerTask('watch', [ 'watch']);


ฉันมีชื่อ / ปัญหาที่แน่นอนนี้ Sheesh …
Steve Meisner

1
สิ่งนี้แก้ไขได้สำหรับฉันไม่ใช่คำตอบที่ยอมรับ ขอบคุณพระเจ้าที่มี Stackoverflow และคำตอบของคุณฉันจะไม่พบสิ่งนี้ในอีกล้านปี: D
Marko Grešak

11

ฉันเพิ่งแก้ไขข้อผิดพลาดที่คล้ายกัน "Recursive process.nextTick detect" ซึ่งเกิดจาก command: grunt server

การแก้ไขปัญหา? ใช้ sudo grunt serve แทน


นี่ไม่ควรเป็นทางออก sudoไม่ควรใช้เว้นแต่จะมีบางอย่างที่เปลี่ยนแปลงระบบของคุณ ดูเหมือนว่าคุณทำsudo npm installซึ่งมักจะไม่ดี
Eddie Monge Jr



0

วิธีการแก้ปัญหาทางเลือก: ตรวจสอบดูของคุณเพื่ออาร์กิวเมนต์ไฟล์ที่ว่างเปล่า

นี่คือข้อความที่ตัดตอนมาจากไฟล์ gruntfile

watch: {
  all: {
    options:{
      livereload: true
    },
    files: ['src/scss/*.scss', 'src/foo.html',, 'src/bar.html'],
    tasks: ['default']
  }
}

ในกรณีของฉันฉันสามารถสร้างข้อผิดพลาดของผู้โพสต์ต้นฉบับใหม่ได้ตามต้องการโดยมีอาร์กิวเมนต์ว่างด้านบน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.