2013-09-24 62 views
56

Có cách nào để thay đổi vị trí thư mục node_modules không?Thay đổi vị trí node_modules

Ví dụ:

- dir1 
- dir2 
- node_modules 

tới:

- dir1 
- dir2 
    - node_modules 
+4

Tôi đoán bạn đang tìm cách cài đặt các phụ thuộc trong một thư mục khác, đúng không? Nếu vậy, tất cả các bạn phải di chuyển tệp 'package.json' của bạn bên trong' dir2' rồi chạy 'npm install' từ dir2. – Kamrul

+0

@Kamrul nhưng sau đó tôi sẽ phải chạy các hình thức ứng dụng dir2? –

+0

@Kamrul nó đã làm thủ thuật cho tôi! Chỉ cần sử dụng một kịch bản lệnh shell để khởi động máy chủ, chứ không phải bắt đầu mặc định npm. Xin vui lòng, đăng nó như là một câu trả lời để tôi có thể chấp nhận nó. –

Trả lời

42

Sau đây là đoạn code mà trông int thư mục node_modules theo mặc định

Module.prototype.load = function(filename) { 
    debug('load ' + JSON.stringify(filename) + 
     ' for module ' + JSON.stringify(this.id)); 

    assert(!this.loaded); 
    this.filename = filename; 
    this.paths = Module._nodeModulePaths(path.dirname(filename)); 

    var extension = path.extname(filename) || '.js'; 
    if (!Module._extensions[extension]) extension = '.js'; 
    Module._extensions[extension](this, filename); 
    this.loaded = true; 
}; 

Vì vậy, sau đây là tìm kiếm chính xác mẫu:

  1. Node.JS xem liệu mô-đun đã cho là mô-đun chính hay không. (ví dụ: http, fs, v.v.) Luôn được ưu tiên trong các mô-đun tải .

  2. Nếu module cho không phải là một mô-đun lõi (ví dụ. http, fs, vv), Node.js sau đó sẽ bắt đầu tìm kiếm một thư mục có tên, node_modules.

    Nó sẽ bắt đầu trong thư mục hiện tại (liên quan đến tệp hiện đang thi hành trong Node.JS) và sau đó làm việc theo cách phân cấp thư mục, kiểm tra từng cấp cho thư mục node_modules. Sau khi Node.JS tìm thấy thư mục node_modules, khi đó, nó sẽ cố gắng tải mô-đun đã cho dưới dạng tệp JavaScript (.js) hoặc dưới dạng thư mục con được đặt tên; nếu nó tìm thấy thư mục con được đặt tên, nó sẽ cố tải tệp theo nhiều cách khác nhau. Vì vậy, ví dụ

  3. Nếu bạn thực hiện một yêu cầu để tải các module, "utils" và một thư mục của nó không phải là một tập tin .js thì:
    Node.JS sẽ tìm kiếm một thư mục phân cấp cho node_modulesutils theo các cách sau:

    ./node_modules/utils.js 
    ./node_modules/utils/index.js 
    ./node_modules/utils/package.json 
    
  4. Nếu Node.JS vẫn không thể tìm thấy tập tin trong bước trên, Node.js sau đó sẽ bắt đầu nhìn vào các đường dẫn thư mục từ các biến môi trường tức là NODE_PATH thiết lập trên máy tính của bạn (rõ ràng được thiết lập bởi Node.js tập tin cài đặt nếu bạn đang ở trên cửa sổ) Không tìm thấy trong tất cả các bước trên, sau đó in dấu vết ngăn xếp đến stder
    Ví dụ:: Error:Cannot find module 'yourfile'
    Để biết thêm thông tin: liên kết là here ngay cả những cyclic require() được giải thích rất tốt ..

+4

Cảm ơn bạn rất nhiều vì lời giải thích thú vị này. Vì vậy, đặt tất cả lại với nhau - không có cách nào dễ dàng để làm điều đó/hoặc không nên được thực hiện tại al, do khả năng tương thích với các mô-đun khác? –

+1

Bạn có thể đi theo đường dẫn tương đối với 'require ('./ pathFolder/PathFile'); ' –

+0

Nhưng đó không phải là những gì tôi muốn đạt được. Tất cả những gì tôi muốn là đặt thư mục node_modules ở một nơi khác. –

1

Trong thực tế, chúng tôi thậm chí có thể chỉnh sửa các tập tin nodevars.bat trong đó dòng cuối cùng là:

if "%CD%\"=="%~dp0" cd /d "%HOMEDRIVE%%HOMEPATH%"

Chúng tôi có thể chỉ định thư mục riêng của chúng tôi thay vì chăm sóc thư mục home của người dùng:

%HOMEDRIVE%%HOMEPATH%

sao cho vị trí nút-mô-đun sẽ tự động xem xét sau.

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