Các phụ thuộc của Node.js nặng quá nhiều


9

Gần đây tôi bắt đầu chơi với node.js.

Bây giờ, mọi nút hướng dẫn ngoài kia nói rằng bạn nên bắt đầu với

npm init

và sau đó, giả sử bạn muốn một số khung máy chủ chuẩn, giả sử bạn chọn express:

npm install express

nhưng sau đó bạn sẽ muốn nhiều thứ nữa mà bạn quen thuộc từ các thế giới như ASP.NET.

Tôi nói về công cụ mẫu (ngọc bích) và bộ xử lý trước bản định kiểu (SASS).

Và sau đó họ nói với bạn "cài đặt gulp / grunt! Để bạn có thể giảm thiểu và làm xấu đi và chạy máy chủ và rất nhiều thứ khác một cách tự động!"

Và điều đó có nghĩa là cài đặt gulp, node-sass, và gulp-sass, và gulp-uglify, và có thể một số thứ thực sự thú vị hơn (tsd hoặc babel, markdown, v.v.) ...

Nhưng tất cả những thứ đó đều nặng trên đĩa và dự án của bạn. Đừng tìm kiếm một khoảnh khắc và bạn có thể dễ dàng tìm thấy chính mình với kích thước đĩa 100 MB + cho dự án đó (thậm chí chưa bắt đầu!) Không đề cập đến hơn 10000 tệp vì mỗi mô-đun nút mang lại sự phụ thuộc của riêng nó, bất kể điều đó giống nhau phụ thuộc được sử dụng bởi một mô-đun khác. Và đây là một điều rất khó để di chuyển bất cứ nơi nào, nói gì đến một máy chủ web.

Tui bỏ lỡ điều gì vậy? Tôi không nghĩ rằng có thể có rất nhiều lời khen ngợi dành cho môi trường nút trong khi lỗ hổng rõ ràng như vậy tồn tại. Tôi có kỳ vọng quá nhiều không (sau tất cả những gì tôi đã cố gắng sử dụng nhiều công cụ cùng một lúc), có điều gì tầm thường mà các cựu chiến binh Node biết để bỏ qua điều này không?


2
hoàn toàn đồng ý, tôi đã rất ngạc nhiên khi thấy cây npm cho một số dự án mặt trước. Tôi đoán trong thế giới .net bạn có cùng một thứ, nhưng tất cả chúng đều được biên dịch thành nhị phân nên bạn không để ý
Ewan

2
Thật không may, đây không thực sự là một câu hỏi cụ thể và có thể trả lời được, vì vậy nó có thể sẽ bị đóng lại sớm. Điều tôi có thể nói với bạn là 1) trong khi tất cả các công cụ bổ sung đó đều hữu ích cho việc gì đó, các dự án nhỏ đơn giản là không cần hầu hết trong số chúng 2) tất cả các khung lập trình khác có chức năng tương tự sẽ đi kèm với một lượng công cụ tương tự (chỉ cần nhìn khi tải xuống JRE hoặc .NET), điểm khác biệt duy nhất là số lượng bạn cần là một phần của bản phân phối "mặc định" và số tiền bạn phải tìm trong các gói khác 3) 100 MB trên máy dev của bạn là gì
Ixrec

1
@Ixrec tất nhiên là có thể trả lời được, bạn vừa làm (hoặc đã cố gắng) :). Nhưng sau đó, tôi có thể tranh luận về tuyên bố của bạn: 1) đây không phải là một dự án nhỏ - hãy xem xét một dự án có nhiều chế độ xem với các tệp js và bảng định kiểu của riêng họ. Thế là đủ để khiến bạn muốn có sass, cssnano và uglify. cũng đủ để làm cho bạn muốn thể hiện, ngọc và một chút nữa. 2) Tôi đã có một dự án .net đàng hoàng mà không trở nên nặng nề (và không có nhiều tệp). 3) có thể máy dev hiện đại thực hiện việc này một cách dễ dàng, nhưng điều đó cũng nặng trên máy chủ, và điều đó có liên quan hơn một chút. Tôi có lầm không?
Hoặc Yaniv

2
@OrYaniv Thật vậy, bạn đang chứng minh quan điểm của tôi: đây là loại vấn đề có thể được thảo luận , nhưng không được trả lời vì nó quá rộng và phụ thuộc quá nhiều vào chính xác những dự án bạn đang làm và những gì phụ thuộc vào bạn nhu cầu. Nhân tiện, các cuộc thảo luận là hoàn toàn tốt trong trò chuyện . Hoặc trên Quora.
Ixrec

3
Chào mừng bạn đến với thế giới "tất cả hoặc không có gì" tuyệt vời của node.js, điều này thực sự không dễ dàng và không tốt hơn bất cứ điều gì bạn đã sử dụng trước đây.
Traubenfuchs

Câu trả lời:


3

Vấn đề bên trái gần đây là một ví dụ điển hình của vấn đề với xu hướng này trong Node. Khi bạn phụ thuộc vào quá nhiều thứ, tất cả chúng đều có xu hướng đi ka-pow, làm cho dự án của bạn khó gỡ lỗi hơn và, đối với người mới, khó nắm bắt hoạt động của ngôn ngữ.

Bây giờ các lập trình viên Node.js giỏi đã biết viết các ứng dụng tối giản, trong đó các phụ thuộc có liên quan. Càng ít thứ bạn phụ thuộc vào - càng tốt. Cần phải đệm dây bên trái? Mã nó trong một người trợ giúp, đó là 11 dòng mã với khoảng trống. Cần đánh số hàng chuỗi của bạn? Mã nó vào, nó ít hơn 100 dòng mã.

Ngay cả đối với các nhiệm vụ phức tạp hơn, như quản lý dự án, tôi khuyên bạn nên gắn bó với Makefiles trong khi dự án của bạn đủ đơn giản - grunt và gulp thực sự, thực sự hữu ích cho các dự án khổng lồ có nhiều việc phải làm. Nhưng đối với blog SPA của bạn? Viết một Makefile, phải mất 5 phút và bạn biết nó hoạt động như thế nào.

Sự cám dỗ để chỉ duyệt npm mỗi khi bạn cần viết 3 dòng mã là tuyệt vời, nhưng nên chống lại, bất cứ khi nào hợp lý. Không bao gồm jQuery nếu bạn có 3 thao tác DOM, không sử dụng góc cạnh cho trang quảng cáo tĩnh đó, không sử dụng express cho máy chủ đơn giản. Nhưng bạn đang mã hóa một CMS? Bạn sẽ phải điên lên khi không sử dụng các gói như jQuery, gạch dưới và những gì không. Làm việc với 10 loại bộ sưu tập, 3 dbs và truy vấn chúng mọi lúc? Bạn sẽ không điên khi không sử dụng dấu gạch dưới và một vài thứ khác. Chỉ cần nghĩ rằng 'tôi có tiết kiệm đủ thời gian bằng cách cài đặt gói này không?' hoặc 'Tôi không thể viết mã này trong nửa giờ hoặc lâu hơn?'


1
Một lưu ý khác, có thực sự cần 100 dòng mã Javascript để thêm số dòng vào chuỗi không?
Robert Harvey

Hahahah, tôi đã không thực sự nghĩ đến việc thực hiện đánh số dòng thực tế, bởi vì ... tôi không thực sự thấy sự cần thiết phải tồn tại một thứ như vậy, chứ đừng nói là một gói.
BorisStoyanovv 30/03/2016

Bạn có thể có thể cắt điều đó xuống một nửa bằng cách chỉ để nó được quan tâm. Nó thực sự là một vấn đề đơn giản để giải quyết. (Và đó là một lớp lót trong một ngôn ngữ như lược đồ, và có lẽ là con trăn mà tôi nghĩ về nó)
Shayne
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.