2013-08-03 51 views
11

Tôi có một vấn đề về cài đặt NPMNPM: cách nguồn ./node_modules/.bin thư mục?

Tôi đã tạo ra một dự án nói dự án A

cd ~/projectA 
npm install sails 

nhưng cánh buồm lệnh không được tìm thấy sau khi cài đặt.

Tôi biết rằng nó được cài đặt thành công trong thư mục ~/projectA/node_modules. nhưng không thể thực thi được. Và tôi biết nó được cài đặt ~/projectA/node_modules/.bin

Làm cách nào để tự động nguồn .bin bất cứ khi nào tôi nhập vào thư mục projectA này?

Tôi đã làm gì sai?

+0

Bạn có chắc chắn nó được cài đặt dưới '~/PROJECTA/node_modules/.bin' và không phải '~/projectA/node_modules/sails/bin' thay thế? Ý bạn là gì? – verybadalloc

+0

@verybadalloc nguồn giống như unix dot http://en.wikipedia.org/wiki/Dot_(Unix) và http://superuser.com/a/46146 – SHernandez

+2

có thể trùng lặp của [Cách sử dụng gói được cài đặt cục bộ trong nút \ _modules?] (http://stackoverflow.com/questions/9679932/how-to-use-package-installed-locally-in-node-modules) – mightyiam

Trả lời

15

tôi có thể cung cấp cho bạn một giải pháp thanh nha, mà là làm việc cho tôi. Tôi vừa xuất đường dẫn của mình trong tệp .bashrc của mình.

export PATH="$PATH:./node_modules/.bin" 

Chỉnh sửa: Đã lâu rồi, nhưng tôi đã thay đổi chiến lược sử dụng tập lệnh npm thay thế. Trong trường hợp trên, thiết lập package.json như sau:

"scripts": { 
    "sails": "sails" 
} 

nào bạn có thể chạy với

npm run sails 

hoặc với đối số

npm run sails -- <args> 
+6

Tôi sẽ đặt node_modules/.bin trước: 'export PATH = "./node_modules/.bin:$PATH" ' –

+0

Lưu ý về việc sử dụng tập lệnh npm và gợi ý về cách sử dụng args – logan

2

Để sử dụng trên dòng lệnh như sails generate foo, bạn sẽ cần cài đặt mô-đun npm trên toàn cầu.

npm install -g sails 

Bạn cũng có thể sử dụng đường dẫn vào thùng trong lệnh nếu bạn không muốn cài đặt trên toàn thế giới:

./node_modules/sails/bin/sails.js generate foo 
2

Các hướng dẫn chính thức cho cánh buồm (https://github.com/balderdashy/sails) tư vấn

To cài đặt các phiên bản ổn định mới nhất với các công cụ dòng lệnh:

sudo npm -g install sails 

này cài đặt trên toàn cầu và thêm vào một thư mục như /usr/local/bin mà phải ở trong $PATH của bạn.

Tuy nhiên, để trả lời câu hỏi chung về vị trí của các tập tin nhị phân nếu bạn cài đặt tại địa phương, họ nên được đặt trong ./node_modules/.bin thư mục (để chạy ./node_modules/.bin/sails ...)

10

Bạn nên sử dụng lệnh npm bin để có được một đường dẫn tuyệt đối đến của bạn thư mục bin hiện tại của nút.

Ví dụ:

➤ lessc 
bash: lessc: command not found 
➤ npm bin 
/home/brice/[...]/node_modules/.bin 
➤ export PATH=$(npm bin):$PATH 
➤ lessc --version 
lessc 1.7.3 (Less Compiler) [JavaScript] 

Điều này tránh các vấn đề về đường dẫn tương đối, đặc biệt là nếu bạn đang đi để được sử dụng điều này trong một hệ thống xây dựng mà sẽ gọi lệnh trong thư mục con.

1

Một chút mạnh mẽ hơn là:

export PATH=$(npm bin):$PATH 

Bạn có thể chạy nó, thêm nó vào hồ sơ shell của bạn, hoặc tạo một bí danh như:

alias snpm='export PATH=$(npm bin):$PATH' 

Nếu bạn đi con đường bí danh , hãy chắc chắn sử dụng dấu nháy đơn để nó trì hoãn việc thực hiện các biến!

+0

Cảm ơn bạn đã trợ giúp! –

0

Nếu bạn không thích gây rối với PATH của mình để chạy tập lệnh npm không phải là toàn cục - ví dụ: bạn là người duy nhất sử dụng nó -, cá nhân tôi khuyên bạn nên sử dụng một sh ​​"bí danh".

  1. NPM cài đặt (địa phương) gói yêu của bạn (json-diff đây, ví dụ)

    cd ~ && npm install json-diff 
    
  2. alias nó (lưu nó trong ~/file .xxxxrc của bạn):

    alias diffj "\`npm bin\`/json-diff !*" 
    

Sau đó, cho diffing 2 json của:

diffj old.json new.json 
0

Trong ~/.bashrc của tôi, tôi đã điều sau đây:

function nbin { 
    local dir; 
    dir=$(npm bin) 
    if [ -d "$dir" ]; then 
    (# subshell to not change this shell's $PATH 
     PATH=$dir:$PATH 
     eval "[email protected]" 
    ) 
    else 
    echo "\"$dir\" is not an npm binary directory." >&1 
    return 1 
    fi 
} 

Sau đó tôi có thể chạy thực thi foo trong thư mục .bin như:

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