2013-11-22 21 views
6

Tôi đang gặp một số khó khăn với tác vụ Grunt mà tôi đang soạn thảo. Tôi đang cố gắng để thực hiện cài đặt npm, tiếp theo là bower cài đặt, theo sau là một mục tiêu trung tâm grunt (để kích hoạt một lệnh xây dựng cho nhiều tiểu dự án).Node JS - child_process đẻ trứng ('npm install') trong kết quả nhiệm vụ Grunt trong lỗi ENOENT

Sự cố tôi gặp phải nằm trong child_process. Tôi nhận được lỗi ENOENT spawn nếu tôi chạy các lệnh sau trong nhiệm vụ grunt của tôi, với NPM cài đặt lệnh spawn rằng hiện đang nhận xét ra:

var path = require('path'), 
     projectPath = path.resolve(process.cwd(), this.data.activity); 

     grunt.log.debug('project path computed as: ', projectPath); 
     process.chdir(projectPath); 

     console.log('current dir is: ', process.cwd()); 
     console.log('EVN is: ', process.env); 

     var spawnProcess = spawn('ls'); 
     // var spawnProcess = spawn('npm install'); 

     spawnProcess.stdout.on('data', function (data) { 
      console.log('' + data); 
     }); 

     spawnProcess.stderr.on('data', function(data) { 

      console.log('something went wrong installing deps for ' + path + '. Error: ', data); 
     }); 

     spawnProcess.on('close', function (exitCode) { 

      console.log('ls has finished with Exit Code: ' + exitCode); 
     }); 

mã hiện tại (với ls thay vì NPM cài đặt) kết quả trong:

running "install:projects" (install) task[D] Task source: /Users/zedd45/proj/Gruntfile.js 
Verifying property install.projects exists in config...OK 
File: [no files] 
[D] project path computed as: /Users/zedd45/proj/activity/web/client 
current dir is: /Users/zedd45/proj/activity/web/client 
EVN (abbreviated) is: { 
    TERM_PROGRAM: 'iTerm.app', 
    SHELL: '/bin/bash', 
    PWD: '/Users/zedd45/proj', 
... 
    OLDPWD: '/Users/zedd45/proj/activity/web/client', 
    _: '/usr/local/bin/grunt' } 

GruntFile.js 
bower.json 
package.json 
this_is_the_directory_you_are_looking_for.txt 
ls has finished with Exit Code: 0 

nhưng nếu tôi thay đổi 'ls' thành 'NPM cài đặt' tôi nhận thay '' Fatal error: spawn ENOENT

ngay sau khi in ENV.

Tôi đã thử chmod 777 cho thư mục đó, điều này dường như không hữu ích.

Tôi cũng đã cố gắng:

// var spawnProcess = spawn('npm install', {'cwd': projectPath}); 

// var spawnProcess = spawn('npm install', [], {'cwd': projectPath}); 

Kết quả cựu trong

Warning: Object # has no method 'slice' Use --force to continue.

các sau vẫn dẫn đến lỗi ENOENT.

Bất kỳ trợ giúp nào chính xác với lỗi ENOENT này có thể sẽ giúp ích rất nhiều; Tôi đã không có nhiều thành công với việc Googling nó cũng như với các số child process API docs

Trả lời

7

Kiểm tra lại tài liệu trên child_process.spawn một lần nữa. Đối số đầu tiên phải là chỉ có lệnh để chạy và tham số thứ hai là đối số:

var npm = spawn('npm', ['install'], { cwd: projectPath }); 
+1

Điều đó hoạt động hoàn hảo. Tôi không thể tin được giải pháp dễ dàng/rõ ràng như thế nào khi bạn cung cấp nó, hoặc nó đã làm tôi khó chịu như thế nào. Cám ơn rất nhiều! – zedd45

+2

để tham khảo trong tương lai của khách truy cập có thể, http://stackoverflow.com/questions/27688804/how-to-debug-any-node-js-child-process-error-spawn-enoent – laconbass

+0

Hmm, điều này không hiệu quả đối với tôi. Vẫn nhận được một spawnSync npm ENOENT (vâng tôi đang sử dụng phiên bản đồng bộ hóa) – ianbeks

Các vấn đề liên quan