2013-04-04 6 views
100

Tôi có một ứng dụng có bộ phụ thuộc thông thường trên mô-đun bên thứ ba (ví dụ: 'express') được chỉ định trong tệp package.json trong các phụ thuộc. Ví dụ.cách chỉ định mô-đun cục bộ làm phụ thuộc gói npm

"express"  : "3.1.1" 

Tôi muốn cấu trúc mã riêng của mình theo mô-đun và có một bộ mô-đun cục bộ (có nghĩa là hệ thống tệp tôi hiện đang ở) được cài đặt bởi package.json. Tôi biết rằng tôi có thể cài đặt mô-đun cục bộ bằng cách chạy:

npm install path/to/mymodule 

Tuy nhiên, tôi không biết cách thực hiện điều này thông qua cấu trúc phụ thuộc package.json. Sử dụng tùy chọn --save trong lệnh này chỉ đơn giản là đặt "mymodule": "0.0.0" vào package.json của tôi (không tham chiếu đến vị trí tệp). Nếu sau đó tôi gỡ bỏ phiên bản đã cài đặt từ node_modules, và thử cài đặt lại từ package.json, nó không thành công (vì nó tìm "mymodule" trong sổ đăng ký trung tâm, và không nhìn cục bộ).

Tôi chắc chắn đó là cách nói cấu trúc "dependencies": {} mà tôi muốn nó được cài đặt từ đường dẫn hệ thống tệp nhưng không biết cách thực hiện.

Bất kỳ ai khác có vấn đề này? Cảm ơn.

+0

Câu hỏi thực sự hay. Buồn khi nhận ra rằng không có tính năng tương đương với 'gói.json' với những gì chúng ta có trong 'Gemfile's. – Jarl

+2

có thể trùng lặp của [Phụ thuộc cục bộ trong package.json] (http://stackoverflow.com/questions/14381898/local-dependency-in-package-json) – Kelly

Trả lời

1

Nếu đó là acceptible chỉ đơn giản là xuất bản module của bạn được cài đặt sẵn trong node_modules cùng với các file khác, bạn có thể làm điều đó như thế này:

// ./node_modules/foo/package.json 
{ 
    "name":"foo", 
    "version":"0.0.1", 
    "main":"index.js" 
} 

// ./package.json 
... 
"dependencies": { 
    "foo":"0.0.1", 
    "bar":"*" 
} 

// ./app.js 
var foo = require('foo'); 

Bạn cũng có thể muốn lưu trữ mô-đun của bạn trên git và nói với gói cha mẹ của bạn. json để cài đặt phụ thuộc từ git: https://npmjs.org/doc/json.html#Git-URLs-as-Dependencies

+4

Thật không may là sẽ liên quan đến node_modules có các mô-đun cục bộ của tôi và bên thứ ba/đã đóng góp mô-đun được cài đặt từ sổ đăng ký (ví dụ: kết nối) trong cùng một thư mục. Bên cạnh đó là khó hiểu từ góc nhìn Git/VCS (nghĩa là phải bỏ qua tất cả trong node_modules ngoại trừ những cái tôi tạo ra), nó cũng là thực hành không tốt (những gì tôi đã viết và không được xuất bản nên được giữ riêng biệt với những người khác đã viết và xuất bản)). –

+0

Khi tôi thêm mô-đun cục bộ, hãy thực hiện các thay đổi mà ứng dụng chính của tôi không nhìn thấy. Tại sao điều này là trường hợp? –

6

tôi không thể tìm thấy một cách gọn gàng cuối cùng vì vậy tôi đã đi để tạo một thư mục gọi local_modules và sau đó thêm bashscript này đến package.json trong scripts-> cài đặt sẵn

#!/bin/sh 
for i in $(find ./local_modules -type d -maxdepth 1) ; do 
    packageJson="${i}/package.json" 
    if [ -f "${packageJson}" ]; then 
     echo "installing ${i}..." 
     npm install "${i}" 
    fi 
done 
138

Tính đến NPM 2.0.0, nhập khẩu phụ thuộc địa phương được hỗ trợ natively. Đây là documented by danilopopeye in response to a similar question. Tôi đã sao chép phản hồi của anh ấy ở đây để giúp mọi người cần tìm câu trả lời đúng, vì câu hỏi này xếp hạng rất cao trong kết quả tìm kiếm của Google.

Tính năng này được triển khai trong phiên bản 2.0.0 của npm. Ví dụ:

{ 
    "name": "baz", 
    "dependencies": { 
    "bar": "file:../foo/bar" 
    } 
} 

Bất kỳ của các đường dẫn sau đây cũng có giá trị:

../foo/bar 
~/foo/bar 
./foo/bar 
/foo/bar 
+2

Điều này phù hợp với tôi. (Tôi vừa làm một đường dẫn tương đối cục bộ như "mymodule": "tệp: mymoduledir" ' –

+1

Đã thử nghiệm và làm việc với npm 5.0.3 –

+11

' '' npm install --save ../ my-local-repo''' –

0

Sau khi đấu tranh nhiều với các lệnh liên kết NPM (gợi ý giải pháp cho việc phát triển module địa phương mà không công bố chúng vào một registry hay duy trì một bản sao riêng biệt trong thư mục node_modules), tôi đã xây dựng một mô-đun npm nhỏ để trợ giúp với vấn đề này: https://www.npmjs.com/package/lib-manager

Hy vọng nó sẽ giúp ai đó.