Gói nút (Grunt) được cài đặt nhưng không khả dụng


187

Tôi đang cố gắng xây dựng thư viện github jquery-ui bằng cách sử dụng grunt, nhưng sau khi chạy npm installtôi vẫn không thể chạy lệnh theo tệp readme . Nó chỉ cho No command 'grunt' found:

james@ubuntu:~/Documents/projects/ad2/lib/jquery-ui$ grunt build
No command 'grunt' found, did you mean:
 Command 'grun' from package 'grun' (universe)
grunt: command not found
james@ubuntu:~/Documents/projects/ad2/lib/jquery-ui$ npm ls
jquery-ui@1.9.0pre /home/james/Documents/projects/ad2/lib/jquery-ui
├─┬ grunt@0.3.9 
 ├── async@0.1.18 
 ├── colors@0.6.0-1 
 ├─┬ connect@1.8.7 
  ├── formidable@1.0.9 
  ├── mime@1.2.5 
  └── qs@0.5.0 
 ├── dateformat@1.0.2-1.2.3 
 ├─┬ glob-whatev@0.1.6 
  └─┬ minimatch@0.2.4 
    └── lru-cache@1.0.6 
 ├─┬ gzip-js@0.3.1 
  ├── crc32@0.2.2 
  └── deflate-js@0.2.2 
 ├── hooker@0.2.3 
 ├─┬ jshint@0.5.9 
  ├── argsparser@0.0.6 
  └─┬ minimatch@0.2.4 
    └── lru-cache@1.0.6 
 ├─┬ nodeunit@0.6.4 
  ├── tap-assert@0.0.10 
  └─┬ tap-producer@0.0.1 
    ├── inherits@1.0.0 
    ├── tap-results@0.0.2 
    └── yamlish@0.0.5 
 ├─┬ nopt@1.0.10 
  └── abbrev@1.0.3 
 ├─┬ prompt@0.1.12 
  ├── pkginfo@0.2.3 
  └─┬ winston@0.5.11 
    ├── eyes@0.1.7 
    ├─┬ loggly@0.3.11 
     └── timespan@2.2.0 
    └── stack-trace@0.0.6 
 ├── semver@1.0.13 
 ├─┬ temporary@0.0.2 
  └── package@1.0.0 
 ├── uglify-js@1.0.7 
 ├── underscore@1.2.4 
 └── underscore.string@2.1.1 
├── grunt-compare-size@0.1.4 
├─┬ grunt-css@0.2.0 
 ├── csslint@0.9.8 
 └── sqwish@0.2.0 
├── grunt-html@0.1.1 
├── request@2.9.153 
├─┬ rimraf@2.0.1 
 └── graceful-fs@1.1.8 
└─┬ testswarm@0.2.2 
  └── request@2.9.202 

Tôi đang bối rối, tôi đang thiếu cái gì?

Câu trả lời:


412

Các công cụ dòng lệnh không được bao gồm trong phiên bản Grunt mới nhất (0,4 tại thời điểm viết) thay vào đó bạn cần cài đặt chúng một cách riêng biệt.

Đây là một ý tưởng tốt vì nó có nghĩa là bạn có thể có các phiên bản Grunt khác nhau chạy trên các dự án khác nhau nhưng vẫn sử dụng gruntlệnh ngắn gọn đẹp để chạy chúng.

Vì vậy, trước tiên hãy cài đặt các công cụ clunt cli trên toàn cầu:

npm install -g grunt-cli

(hoặc có thể sudo npm install -g grunt-cli).

Bạn có thể thiết lập hoạt động bằng cách gõ grunt --version

Bây giờ bạn có thể cài đặt phiên bản hiện tại của Grunt cục bộ cho dự án của bạn. Vì vậy, từ vị trí dự án của bạn ...

npm install grunt --save-dev

Việc save-devchuyển đổi không thực sự cần thiết nhưng là một ý tưởng tốt bởi vì nó sẽ đánh dấu tiếng lách cách trong phần devDependencies của gói.json như là một mô-đun chỉ phát triển.


5
Tôi không thể tìm thấy đường dẫn thư mục grunt trong Biến hệ thống đường dẫn sau khi chạy npm install -g grunt-cli
singsuyash

10
phải chạy bằng sudo
Phil Hudson

2
Nếu điều này không phù hợp với bạn, hãy thử gỡ bỏ grunt và grunt-cli và sau đó làm lại. Chỉ hoạt động với tôi nếu tôi sử dụng sudoCảm ơn Tom!
Termato

Lưu ý: Nếu bạn phải sử dụng sudo, điều đó có liên quan đến cách bạn thiết lập nút. Nó không lý tưởng nhưng có thể được sửa chữa. sindresorhus gợi ý một cách . Tôi thích sử dụng NVM (trình quản lý phiên bản nút)
Tom P

1
Nếu bạn ở đây và bạn nhấn node not foundsau khi chạy lệnh trên và bạn đã sử dụng trình quản lý gói để cài đặt nút thì bạn cũng cần phải liên kết symlinksudo ln -s /usr/local/bin/nodejs /usr/local/bin/node
anon58192932

26

Thêm /usr/local/share/npm/bin/vào của bạn$PATH


Cảm ơn bạn, việc thêm nó vào .bash_profile đã giúp khắc phục vấn đề của tôi!
Thilak Rao

2
thêm $HOME/npm/binlàm việc cho tôi trên Ubuntu 13.10.
Eliran Malka

24

Nếu bạn đã cài đặt gói Grunt bằng cách chạy npm install -g gruntvà nó vẫn nói No command 'grunt' foundhoặc grunt: command not found, một cách nhanh chóng và bẩn thỉu để làm việc này là liên kết các tệp nhị phân nút với $ PATH của bạn theo cách thủ công.

Trên MacOSX / Linux, bạn có thể thêm dòng này vào tệp ~/.bash_profilehoặc ~/.bashrctệp của mình.

PATH=$PATH:/usr/local/Cellar/node/HEAD/bin # Add NPM binaries

Bạn có thể nên thay thế /usr/local/Cellar/node/HEAD/binbằng đường dẫn nơi các nhị phân nút của bạn có thể được tìm thấy.

Nếu điều này nhanh chóng và bẩn thỉu đối với tôi, thì đó là vì mọi thứ sẽ hoạt động mà không làm điều này, nhưng vì một lý do không xác định, một liên kết dường như bị phá vỡ. Vì không ai ở IRC có thể cho tôi biết lý do tại sao điều này xảy ra, tôi đã tìm ra cách riêng để khiến nó (tiếng càu nhàu) hoạt động.

PS: Điều này sẽ giúp bạn làm cho grunt hoạt động, câu trả lời này không liên quan đến jquery-ui.

Cập nhật 02/2013 : Bạn nên xem câu trả lời của @ tom-p để giải thích rõ hơn những gì đang diễn ra. Tom cung cấp cho chúng tôi giải pháp thực sự thay vì hack tệp bashrc của bạn: cả hai đều hoạt động, nhưng bạn nên thử cài đặt grunt-clitrước .


Xem câu trả lời khác - cung cấp lời giải thích.
Joly Julum

Bạn có thể clairfy những gì Cellar ở đây? Đây có phải là một cái gì đó cụ thể cho bạn / cài đặt của bạn?
Brian C

12

Trong trường hợp của tôi, tôi cần sửa đổi tệp / usr / local / bin / grunt trong dòng 1 (không thực hiện điều này):

 #!/usr/bin/env node //remove this line
 #!/usr/bin/env nodejs // and put this line to run with nodejs

Đã chỉnh sửa:

Để tránh sự cố, tôi đã tạo một liên kết với tên của "nút" vì nhiều chương trình khác vẫn sử dụng lệnh "nút".

 sudo ln -s /usr/bin/nodejs /usr/sbin/node

6
Downvote xây dựng để can ngăn bất cứ ai từ chỉnh sửa các tập tin đóng gói thủ công. Đối với vấn đề của bạn, bạn cần phải apt-get install nodejs-legacy.
Không khí

Đề xuất của bạn là một trong những gợi ý mới nhất và duy nhất hoạt động trên bản cài đặt hoàn toàn mới của tôi với Debian Jessie.
Helzgate

Ok Air, nhưng tôi đang sử dụng OSX, tôi sẽ thử một số thứ nhưbrew install nodejs-leacy
Edgard Leal

@ Cảm ơn đó là vấn đề của tôi. Sau khi làm theo tất cả các bước trước đó, nó không thể nhận ra tiếng lẩm bẩm .
kemicofa ghost

11

Có một cách nữa để chạy grunt trên windows, mà không cần thêm bất cứ thứ gì trên toàn cầu. Đây là trường hợp khi bạn không phải làm bất cứ điều gì với% PATH%

nếu bạn đã cài đặt grunt và grunt-cli (không có công tắc -g). Hoặc bằng cách:

npm install grunt-cli
npm install grunt@0.4.5

Hoặc bằng cách có nó trong tệp tests.json của bạn như:

"devDependencies": {
    "grunt-cli": "^1.2.0",
    "grunt": "^0.4.5",

Bạn có thể gọi grunt từ cài đặt cục bộ của bạn bằng cách:

node node_modules\grunt-cli\bin\grunt --version

Đây là một giải pháp cho những người vì một số lý do không muốn hoặc không thể chơi với PATH hoặc có thứ gì đó làm hỏng nó mọi lúc, ví dụ như trên một tác nhân xây dựng.

Chỉnh sửa: Đã thêm phiên bản khi grunt-cli hoạt động với grunt> 0,3


Ai đó sử dụng docker có thể thấy nó hữu ích.
Daniel Kmak

11

Trên WIN7, tôi phải thêm thủ công đường dẫn vào thư mục npm (chứa tệp 'grunt' khó nắm bắt) vào biến môi trường Windows PATH.
Trong trường hợp của tôi đó làC:\Users\mhaagsma\AppData\Roaming\npm


2

Cách đúng để cài đặt grunt là chạy lệnh này:

npm install grunt -g

(Chuẩn bị "sudo" cho lệnh trên nếu bạn nhận được thông báo lỗi EACCESS)

-g sẽ khiến npm cài đặt gói trên toàn cầu, vì vậy bạn sẽ có thể sử dụng gói này bất cứ khi nào bạn muốn trong máy hiện tại của mình.


6
Lưu ý rằng nếu bạn làm điều này (tôi vừa thử nghiệm), gruntvẫn sẽ thất bại vì gói grunt không bao gồm bất kỳ công cụ dòng lệnh nào. Bạn cần grunt-cli.
Không khí

3
rõ ràng, bạn cần cả địa phương và toàn cầu
Adonis K. Kakoulidis

1
cài đặt toàn cầu (cho nhu cầu dòng lệnh), cài đặt cục bộ cho nhu cầu loại "yêu cầu (bất cứ điều gì)". Vì vậy, bạn cần phải làm cả hai. Cảm ơn bạn đã giúp đỡ!
prograhammer

1

Xin chào tôi đã gặp sự cố này trên mac và những gì tôi đã làm là

cài đặt toàn cầu và tiền tố với đường dẫn toàn cầu

sudo npm install grunt -g --prefix=/usr/local

hiện nay $ which grunt

nên đặt ra /usr/local/bin/grunt

Chúc mừng


0

Đôi khi bạn phải npm install package_name -gcho nó hoạt động.


Cảm ơn câu trả lời. Tôi đã tìm thấy một cách khác nhau quanh những gì tôi đang cố gắng làm.
AJP

@AJP bạn có thể cho chúng tôi biết cách bạn làm cho nó hoạt động, thay vì chỉ cho chúng tôi biết bạn đã làm gì không? Cảm ơn.
rayfranco

@rayfranco xin lỗi tôi về cơ bản đã làm tròn nó bằng cách từ bỏ ... Tôi nghĩ rằng chúng tôi đã cố gắng tạo ra thư viện jquery-ui, vì vậy chúng tôi chỉ tải xuống, bây giờ tôi không thể nhớ được ... , xin vui lòng gửi lại giải pháp khi bạn tìm thấy nó. Có vẻ như nhiều người khác đã đến trang này (không có bất kỳ thành công nào).
AJP

0

Giải pháp khác là gỡ bỏ gói ubfox trong trường hợp tôi sử dụng:

sudo apt-get remove ruby-bundler 

Điều đó làm việc cho tôi.


0

Trên Windows, một phần của bí ẩn dường như là nơi npm cài đặt tệp Grunt.cmd. Khi ở trong hộp Linux của tôi, tôi chỉ phải chạy sudo npm install -g grunt-cli, trên máy tính xách tay làm việc Windows 8 của tôi, Grunt được đặt trong thư mục '.npm-global':% USER_HOME% \. Npm-global và tôi phải thêm nó vào Path.

Vì vậy, trên Windows các bước của tôi là:

  • cài đặt npm -g grunt-cli

  • tìm xem vị trí của grunt.cmd ở đâu (tôi đoán đối với một số người trong% USER_HOME% \ App_Data \ Roaming)

  • Đã thêm vị trí vào biến môi trường Đường dẫn của tôi. Đã mở một dấu nhắc cmd mới và lệnh grunt chạy tốt.


0

Trên Windows 10 Thêm phần này vào Đường dẫn của bạn:

%APPDATA%\npm

Cái này tham khảo thư mục ~/AppData/Roaming/npm

[Giả sử rằng bạn đã chạy npm install -g grunt-cli]

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.