2013-09-02 26 views
16

tôi cố gắng để cài đặt gói nhanh sử dụng NPM từ bên trong/home/Iwan/my-Dự án thư mục:NPM Cài đặt trọn gói Bên ngoài hiện tại thư mục

npm install express 

[email protected] ../node_modules/express 
├── [email protected] 
├── [email protected] 
├── [email protected] 
├── [email protected] 
├── [email protected] 
├── [email protected] 
├── [email protected] 
├── [email protected] ([email protected]) 
└── [email protected] ([email protected]) 

Điều kỳ lạ là NPM không cài đặt gói nhanh trong thư mục hiện hành (/ home/iwan/my-project/node_modules/express), nhưng trong/home/iwan/node_modules/express.

Tôi có bỏ lỡ điều gì đó không?

Trả lời

47

Nếu thư mục node_modules không tồn tại trong thư mục hiện tại của bạn, NPM sẽ tìm thư mục đó trong các thư mục cao hơn cho đến khi nó tìm thấy. Vì vậy, nếu thư mục cha có một thư mục node_modules, NPM sẽ giả định đó là nơi để cài đặt các mô-đun.

Cách nhanh chóng xung quanh việc này là tạo thư mục trống rỗng node_modules nơi bạn muốn đặt mô-đun.

+0

Ah, cảm ơn bạn @Brad. Bây giờ đã rõ rồi. –

+1

Trên thực tế tôi đến đây từ google tìm kiếm hành vi ngược lại, vì vậy tôi không phải allways đi 'cd ..' trước khi cài đặt. Giải pháp là một lần nữa - cũng giống như câu trả lời này - để tạo 'node_modules' trong thư mục cha. –

+0

Không có tính năng này không hoạt động. Nếu tôi cài đặt 'npm install --save redux', nó được cài đặt trong thư mục dấu nhắc lệnh của tôi là (bằng cách tạo thư mục' node_modules'), và không kiểm tra thư mục 'node_modules' nằm trong thư mục cha. –

2

Tôi tin rằng cách tốt nhất để cài đặt gói với npm là tạo tệp package.json. Như thế này, chỉ cần đặt nó vào thư mục smae như ứng dụng của bạn. Mẫu package.json mẫu có thể trông giống như sau:

{ 
    "name": "application-name", 
    "version": "0.0.1", 
    "private": true, 
    "scripts": { 
    "start": "node app.js" 
    }, 
    "dependencies": { 
    "express": "3.3.5", 
    "jade": "*", 
    "less-middleware": "*", 
    "ejs": "*", 
    "mongoose": "3.6.*" 
    } 
} 

Hãy xem danh sách phụ thuộc. Chỉ cần thêm mô-đun mà bạn muốn, ví dụ: underscore. Chỉ cần thêm nó vào dict phụ thuộc. Giống như vậy:

{ 
    "name": "application-name", 
    "version": "0.0.1", 
    "private": true, 
    "scripts": { 
    "start": "node app.js" 
    }, 
    "dependencies": { 
    "express": "3.3.5", 
    "jade": "*", 
    "less-middleware": "*", 
    "ejs": "*", 
    "mongoose": "3.6.*", 
    "underscore": "*" <-------------- Added 
    } 
} 

Sau đó chuyển đến thư mục của bạn và chỉ chạy npm install và bam! Tất cả các gói và phụ thuộc của chúng sẽ được cài đặt cho bạn. Nó sẽ làm tất cả công việc, và điều đó có nghĩa là làm cho thư mục node_modules của bạn cho bạn. Đây là cách thư mục ứng dụng của tôi trông giống như:

enter image description here

+0

Tuyệt vời! Cảm ơn bạn. package.json làm cho ứng dụng trông rõ ràng và có nhiều thông tin hơn. –

+0

@KurniawanJunaidy Nếu nó làm việc cho bạn, xin vui lòng upvote và chấp nhận câu trả lời. –

+1

Vui lòng không sử dụng ví dụ này. Nếu bạn đang sử dụng * cho các gói của bạn trong sản xuất, bạn cuối cùng sẽ chạy vào những thay đổi phá vỡ và dành quá nhiều thời gian để sửa chúng. Nếu bạn đang phát triển tích cực và muốn đảm bảo các gói của bạn được cập nhật, hãy chắc chắn, sử dụng dấu sao, dấu ngã, hoặc cà rốt, nhưng không để chúng trong quá trình sản xuất. – SgtPooki

0

Bạn cũng có thể tạo một file package.json trống sử dụng hướng dẫn từ trang web https://docs.npmjs.com/files/package.json. Sau đó, đặt điều này trong thư mục dự án của bạn và nhập npm install.

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