2012-02-07 39 views
5

Tôi sắp thực hiện một dự án lớn với node.js và hiện đang thử sắp xếp một số thứ.Luồng công việc tốt nhất bằng cách sử dụng node.js npm và git

Trong các dự án nút trước đó, tôi có một thư mục bổ sung cho tất cả các mô đun nút mà tôi đã sử dụng. Thư mục này đã bị bỏ qua bởi git và tôi quản lý phiên bản và cập nhật thông qua các môđun con git, mà đã không dễ dàng

Những gì tôi đang tìm kiếm là (không phụ thuộc, cập nhật lên phiên bản mới đã không luôn luôn vui vẻ.):

npm install packagename
npm dump_modules_into_file

Vì vậy, tất cả mọi người được tham gia vào dự án này có thể làm:

npm install_or_update_modules_from_file

Tôi không muốn có node_modules được theo dõi bởi kho lưu trữ git của tôi. Về cơ bản tôi muốn một cái gì đó tương tự như cách symonfy2 xử lý nó bundles.

P .: Tôi biết về npm submodule packagename, nhưng lệnh này không hữu ích vì nó không cài đặt các phụ thuộc và không cập nhật các mô-đun.

P.S.2: Tôi đã sẵn sàng về package.json, nhưng điều này cũng có một số sai sót. (Không có thông số nào và bạn phải cập nhật phiên bản mô-đun bằng tay.)

+1

Ý bạn là gì "' package.json' không có tham số? " –

+0

Ví dụ: Để cài đặt mongodb với trình phân tích cú pháp gốc C++ bạn cần phải làm: 'npm install mongodb --mongodb: native'. Tôi đã không tìm ra cách chuyển phần gốc này sang npm khi sử dụng 'package.json'. – TheHippo

Trả lời

6

package.json sẽ thực hiện những gì bạn đang tìm kiếm. Trong nhận xét của bạn về việc chuyển cờ --mongodb:native, cờ đó là một đối số cho lệnh npmkhông hoạt động khi sử dụng package.json trong dự án của riêng bạn. Gói mongodb có một "kịch bản cài đặt" tìm kiếm cờ đó trong môi trường xử lý nút. Nếu lá cờ đó xuất hiện, thì nó sẽ sinh ra một tiến trình khác để xây dựng. Vì vậy, nếu bạn đã MongoDB như một sự phụ thuộc vào package.json bạn

{ 
    "name": "MyProject" 
    , "description": "Test" 
    , "version": "0.0.1" 
    , "dependencies": { 
     "mongodb": "*" 
    } 
} 

Chạy npm install --mongodb:nativesẽ làm việc.

Liên quan đến việc "cập nhật bằng tay" - đây thực sự là lần đầu tiên có thể mất một lúc và tôi chắc chắn bạn có thể viết kịch bản để tạo tập lệnh nếu có nhiều phụ thuộc. Tuy nhiên, có vẻ như bạn có một nhóm khá lớn và nếu trường hợp đó xảy ra, thì việc tự động cập nhật thành package.json sẽ trở nên thực sự xấu xí (nghĩ rằng các nhà phát triển mới, các tính năng thử nghiệm, v.v.) Có trách nhiệm giải trình cho các bản dựng bị hỏng trong phần này của chu kỳ phát triển không nhất thiết là một ý tưởng tồi.

Tài liệu tham khảo:

EDIT: và như Nick đã đề cập, thêm thư mục 'node_modules' để .gitignore sẽ ngăn chặn bất kỳ các tệp đó không được kiểm tra trong repo của bạn

+0

Cảm ơn lời khuyên với các tham số được truyền tới npm nói chung! Tôi sẽ bao gồm lệnh npm trong một kịch bản bash hoặc Makefile và chúng tôi rất tốt để đi ... – TheHippo

+0

http://npmjs.org/doc/shrinkwrap.html có thể đã giúp .... – TheHippo

2

Afaik, cách duy nhất để thực hiện quản lý gói là những gì bạn đã mô tả mặc dù tôi không chắc chắn về những gì bạn không quan tâm về gói package.json .

Nếu bạn muốn kiểm soát chặt chẽ các phiên bản của các mô-đun bạn sử dụng, bạn có thể chỉ định rõ số phiên bản. Bạn cũng có thể sử dụng phương pháp >=X.X.X cũng như tự động lấy thông tin mới nhất (trên ngưỡng) đôi khi tốt cho mục đích phát triển.

này cho phép đồng đội của bạn để làm:

npm install . 

Mà sẽ cài đặt tất cả các phụ thuộc được liệt kê bên trong tập tin package.json. Các cài đặt này sẽ cài đặt thành ./node_modules nhưng bạn có thể .gitignore như bạn đã lưu ý.

6

e là một bài viết hay giải thích khi nào bạn nên và không nên kiểm tra node_modules của bạn thành git. Có thể trả lời câu hỏi của bạn.

node_modules in git

+1

Ưu tiên http: // npmjs .org/doc/shrinkwrap.html –

+0

Thật đáng đọc cả bài viết và liên kết về nút-shrinkwrap –

0

Để kiểm tra đầy đủ các cấu hình gói và đảm bảo rằng các module cư xử như họ sẽ về việc triển khai chính thức bây giờ tôi sử dụng thủ tục sau. Nó hoàn toàn tránh được sự cần thiết phải hack các thư mục node_module của bạn hoặc mã require() để khi bạn triển khai nó chỉ hoạt động.

Đối với các dự án nội bộ hoặc trước khi phát hành cho github, bạn cũng có thể muốn đặt "private": true trong số package.json để npm của bạn sẽ từ chối xuất bản.

  1. Tạo một thư mục dự án dưới sự kiểm soát phiên bản git và thêm tất cả module nút của bạn như là thư mục con. Tên thư mục con phải khớp với tên gói của chúng. Nếu bạn đang làm việc với github, bạn sẽ muốn tạo một repo git riêng biệt cho mỗi thư mục module. Họ có thể là git submodules trong repo dự án của bạn. Thêm node_module vào các tệp .gitignore của bạn.

  2. Cài đặt công cụ như npm-server và chạy nó trong thư mục dự án. Sau đó đặt đăng ký npm thành localhost để bây giờ npm sẽ trao đổi với máy chủ npm cục bộ của bạn để tìm nạp gói. Bất kỳ nó tìm thấy như thư mục con nó sẽ gửi. Bất kỳ nó không tìm thấy nó sẽ proxy đến registry.npmjs.org. $ npm set registry http://localhost:6070/ $ cd ~/projects $ npm-server

  3. Khởi chạy tiện ích mới và tạo một thư mục sandbox riêng $ mkdir sandbox $ cd sandbox

  4. Cài đặt ứng dụng của bạn sử dụng máy chủ đăng ký tại địa phương. Xóa bộ nhớ cache npm cục bộ và cài đặt lại ứng dụng của bạn. Tôi làm điều này trên một dòng để dễ dàng làm lại qua vỏ. Bạn có thể muốn kịch bản nó.

    $ npm cache clear; sleep 3; npm uninstall -g app; sleep 3; npm install -g app

  5. thử nghiệm ứng dụng của bạn:

    $ app ....

  6. xoá đăng ký NPM địa phương đăng ký khi bạn thực hiện xong việc cài đặt:

    $ npm set registry http://registry.npmjs.org:80/

  7. Khi bạn đã hoàn thành thử nghiệm bạn có thể publ ish ứng dụng của bạn và thử lại việc triển khai với npm-server dừng lại.

$ cd ~/projects $ npm publish app


Thay vì đăng ký & xoá đăng ký các sever, bạn chỉ có thể sử dụng máy chủ localhost cho một off cài đặt: $ npm --registry=http://localhost:6070/ install app


Tôi đang ở quá trình viết phiên bản chia tay của npm-server để bạn chỉ cần thực hiện: $ npmsvr on // Registers local registry server $ npmsvr start // Start local registry server $ npmsvr off // Deregisters local registry server

+0

Tôi vừa mới xuất bản 'npmsvr' vào npm registry để làm cho tác vụ này dễ dàng hơn. https://www.npmjs.org/package/npmsvr –

+0

Lưu ý rằng phiên bản này chỉ là một giao diện người dùng nhỏ với 'npm' và' npm-server', do đó bạn vẫn cần cài đặt 'npm-server' –

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