2012-05-10 26 views
6

Tôi nhận thấy rằng trong việc cố gắng nhận các gói nút dường như đơn giản để cài đặt với npm (ví dụ: nerve, một "khung vi mô"), tôi thường gặp phải một số dạng đau phụ thuộc. Sau khi một số đào, tôi theo dõi vấn đề với dây thần kinh để mô-đun bcrypt, mà dường như được viết bằng C/C++ và phải được biên dịch sau khi trình quản lý gói tải xuống.Node.js/npm - anyway để nói nếu một gói là JS tinh khiết hay không?

Thật không may, nó có vẻ như nếu bạn muốn điều này để làm việc trên Windows, câu trả lời là (từ một trong những chủ đề bcrypt vấn đề) "cài đặt một máy ảo Linux". Vì vậy, ngày hôm nay tôi đã làm điều đó, và bắt đầu chạy vào các phụ thuộc khác (bạn cần certain unnamed apt packages cài đặt trước khi bạn có thể nghĩ về xây dựng, mặc dù GCC được cài đặt), sau đó cuối cùng sau khi nhìn thấy một lỗi trình biên dịch C (về một số gói hoặc khác không được có thể tìm thấy "Arrays.c" tôi nghĩ), tôi thực sự đã từ bỏ và chuyển từ dây thần kinh sang thể hiện thay thế. Trớ trêu thay, cài đặt tốc độ lớn hơn và phức tạp hơn với npm trên Linux và Windows mà không có một vấn đề nào.

Vì vậy, câu hỏi của tôi là: có bất kỳ bộ lọc/phụ thuộc theo dõi nào có sẵn cho phép bạn xem liệu gói có phụ thuộc bổ sung ngoài lõi nút không? Bởi vì với tôi sức hấp dẫn của nút là "mọi thứ trong Javascript", và loại công cụ này xua tan ảo tưởng khá khó chịu. Trong thực tế, mặc dù đã làm nhiều hơn thời gian của tôi làm việc với C/C++, bất cứ khi nào tôi thấy một yêu cầu để "làm" một cái gì đó những ngày này tôi thường chạy theo hướng khác la hét. :)

+1

Tôi cảm thấy nỗi đau của bạn Dave, nhưng một số lần chúng tôi buộc phải xuống c/C++ bởi nhu cầu tối ưu hóa và tài nguyên.Sau khi làm việc trên một vài mô-đun nút gốc và cố gắng không lặp lại bất cứ điều gì và sử dụng các phụ thuộc hợp lý, tôi đã gặp phải một số vấn đề. Có lẽ các mô-đun nút hợp lý nhất là các mô-đun gọi hoặc thực thi mã gốc ngược với biên dịch và liên kết với nó. –

Trả lời

4

Tìm kiếm trường "tập lệnh" trong package.json.

Nếu nó có chứa một cái gì đó giống như

"scripts": { 
    "install": "make build", 
} 

và một Makefile trong thư mục gốc, có một khả năng tốt mà gói có một số mô-đun có nguồn gốc mà sẽ phải được biên soạn và xây dựng. Nhiều gói bao gồm một Makefile chỉ để biên dịch thử nghiệm.

Kiểm tra này trên các tài liệu gói không loại trừ khả năng một số phụ thuộc sẽ phải được biên dịch và xây dựng. Điều đó có nghĩa là lặp lại quá trình này cho mỗi phụ thuộc trong package.json, các phụ thuộc của chúng và vân vân.

Điều đó cho biết nhiều mô-đun đã được cập nhật để cài đặt mà không cần xây dựng trên Windows, thể hiện cho một. Tuy nhiên, không thể đảm bảo tất cả các gói.

Sử dụng máy ảo Linux có vẻ là giải pháp thay thế tốt nhất. Developing Node.js applications on Window cung cấp cho bạn hướng dẫn từng bước về cách cài đặt máy ảo, Node.js và Express.

2

Nút không phải là "mọi thứ javascript", vì một cách để mở rộng lõi nút là viết trình cắm c/C++.

Vì vậy, Node là trình bao bọc javascript xung quanh các mô-đun c/C++ sử dụng V8.

Làm thế nào bạn có thể viết trình điều khiển cơ sở dữ liệu hiệu quả trong javascript thuần túy chẳng hạn? nó sẽ có thể nhưng chậm.

đối với bộ lọc, tùy thuộc vào tác giả ghi lại gói của mình. không có bộ lọc tự động.

+1

Bạn có nghĩa là như https://github.com/felixge/node-mysql? – Dave

+0

Như tôi đã nói, có thể (viết trình điều khiển cơ sở dữ liệu js tinh khiết), nhưng bạn có thực sự kiểm tra gói không? tôi đã làm . – mpm

+3

Tôi vừa tìm thấy trang điểm chuẩn này so sánh việc triển khai JS thuần túy với một phiên bản libmysql: https://github.com/Sannis/node-mysql-bindings-benchmarks/wiki Có vẻ như https://github.com/sidorares/ nodejs-mysql-native chỉ là nhanh như một liên kết đến lib mysql. Nó không làm tôi ngạc nhiên chút nào - chắc chắn là những nút cổ chai cho công cụ này sẽ là mạng và cơ sở dữ liệu CPU/I/O, chứ không phải bản thân máy khách? – Dave

7

Giải pháp đầu tiên không cho bạn biết liệu phụ thuộc có làm cho gói không tinh khiết hay không. Tốt hơn để tìm kiếm đánh người nào một trận đầu ra được tạo ra:

find node_modules/ | grep binding.gyp || echo pure 
+0

Có nó cung cấp một câu trả lời, và trong trường hợp này nó thậm chí còn chính xác không giống như câu trả lời đầu tiên. Bạn không thể nói từ một "làm cho xây dựng" những gì mà không. Nó có thể xây dựng cái gì đó không phải là kịch bản thuần túy, nhưng nó có thể không. Và câu trả lời đó cũng không kiểm tra bất kỳ sự phụ thuộc nào. Câu trả lời đúng duy nhất là tìm kiếm bất kỳ bằng chứng nào của nút-gyp, để xây dựng bất cứ thứ gì không tinh khiết. –

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