2015-10-15 23 views
37

Tôi cần biết hành vi sau có bình thường không."npm install" cài đặt tất cả các phụ thuộc trong thư mục node_modules, thay vì yêu cầu chúng lồng nhau

Khi tôi npm install, mỗi gói từ package.json tôi và sự phụ thuộc, không được cài đặt lồng nhau nữa, nhưng mỗi phụ thuộc đã được cài đặt trong thư mục node_modules. Điều đó làm cho thư mục node_modules tôi thổi và trông như thế này:

Screenshot of node_modules directory

Điều này xảy ra kể từ khi tôi cập nhật NPM và nút.

Bây giờ tôi chạy:

npm -v 3.3.6 
node -v 4.2.1 
python 2.7 
windows 7 
wamp 

tập tin package.json của tôi trông như thế này:

{ 
    "private": true, 
    "devDependencies": { 
    "gulp": "^3.8.8" 
    }, 
    "dependencies": { 
    "laravel-elixir": "^3.0.0", 
    "bootstrap-sass": "^3.0.0" 
    } 
} 

Đó là tiêu chuẩn laravel package.json tập tin.

Có cách nào để có thư mục lồng nhau một lần nữa không, vì tôi không thích một bài viết được thổi với hơn 100 thư mục phụ.

Trả lời

33

Đó là hành vi mới của npm 3 theo this npm blog.

+0

Cảm ơn sagie, tôi đoán không có cách nào để làm cho nó lồng nhau một lần nữa để tránh một thư mục cồng kềnh, phải không? (Cũng phải chờ 5 phút, trước khi có thể chấp nhận câu trả lời của bạn như câu trả lời chính xác) – LoveAndHappiness

+9

Phẳng hơn khi tôi nhìn thấy nó. Là một người dùng windows, nó thực sự là khủng khiếp để xóa quá nhiều mô-đun lồng nhau khi nó vượt qua 256 charaters tối đa thực sự nhanh (hoặc là nó 1024, không thể nhớ). Ngoài ra tôi giúp khi bạn nâng cấp các mô-đun như bây giờ nó có thể tái sử dụng tốt hơn cài đặt hiện có và không thay thế tất cả mọi thứ theo mô-đun bạn nâng cấp như có thể phụ thuộc của nó đã không thay đổi. dòng dưới cùng, nó nhanh hơn và sạch hơn theo cách này. – sagie

+0

Tôi tiếp tục cố gắng khắc phục sự cố NPM lol ... vui vì tôi đã vượt qua điều này hoặc tôi vẫn sẽ tìm kiếm giải pháp =) – afreeland

57

Cập nhật: Như Erik Pukinskis đã đề cập trong nhận xét: Kể từ npm 3.5, hỗ trợ cho --legacy-bundling đã bị xóa.


Vâng, có một cách để có lồng thư mục một lần nữa bằng cách thay đổi NPM của (phiên bản 3 như các văn bản này) hành vi mặc định:

  1. Xóa hiện đang có mặt node_modules thư mục.

  2. biết chính xác NPM để cài đặt với di sản bundling cho một cài đặt này:

    npm install --legacy-bundling

A "vĩnh viễn" thay thế:

  1. Set cấu hình npm của bạn luôn sử dụng gói cũ ...

    npm set legacy-bundling=true

  2. .. và chạy như bình thường:

    npm install

Lưu ý: lấy phụ thuộc với di sản bó sẽ mất rất nhiều thời gian hơn vì nhiều phiên bản khác nhau của sự phụ thuộc tương tự sẽ được Cài đặt.

Tuyên bố từ chối trách nhiệm: Với tư cách là người dùng không phải Windows, tôi không cần phụ thuộc vào căn hộ và muốn tìm phụ thuộc tự khai báo một cách dễ dàng có lợi cho tự động xóa. Kể từ khi cài đặt phụ thuộc npm mà không có gói cũ đã mất một số lượng đáng kinh ngạc của thời gian tôi thường sẵn sàng dành những phút thêm thời gian cài đặt. Nó quay trở lại 5 thư mục từ 700+ trước đó (...) trong một thiết lập Laravel Elixir với bootstrap (không sass), font-awesome và jquery được thêm vào.

+1

Câu trả lời này rất hữu ích đối với tôi đối với trường hợp cụ thể của tôi. Mô tả ở đây cho hậu thế: Tôi đã cố gắng xây dựng package.json với các phụ thuộc cho một dự án nút hiện có. sử dụng 'npm install --legacy-bundling --save' chỉ viết các phụ thuộc trực tiếp vào package.json. Sau đó tôi đã thực hiện 'rm -rf node_modules && npm install', để lấy lại thư mục node_modules phẳng mới. Đây là điều tốt nhất của cả hai thế giới đối với tôi. –

+3

Tôi cũng xem xét câu trả lời đúng, vì nó trả lời trực tiếp OP trong xác nhận –

+2

Kể từ npm 3.5, hỗ trợ cho '-legacy-bundling' đã bị loại bỏ. –

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