Làm cách nào để chỉnh sửa mô-đun nút được cài đặt qua npm?


125

Tôi đang sử dụng mô-đun node_swiz, mô-đun này sử dụng mô-đun trình xác thực.

Tôi muốn thực hiện các thay đổi đối với mô-đun trình xác thực, nhưng tôi đã sử dụng npm install để cài đặt các mô-đun / phụ thuộc.

Tôi có thể chỉ thực hiện các thay đổi đối với mô-đun trình xác thực bên trong node_modules hay các phần phụ thuộc của node_modules đó sẽ được tạo lại và phiên bản mới nhất được nhận khi tôi xuất bản lên heroku hoặc lần sau khi tôi chạy cài đặt npm?

Cấu trúc trông như thế này:

myNodeApplication
  - node_modules
     - swiz
         - node_modules
            - validator [this is the library I want to edit]

Cảm ơn đã giúp đỡ!

Câu trả lời:


244

Bạn có thể chỉnh sửa tệp trực tiếp, nhưng tệp này sẽ bị ghi đè bất cứ khi nào cập nhật npm, điều tốt nhất cần làm là truy cập thẳng vào nguồn.

Nếu các thay đổi ảnh hưởng đến chức năng của mô-đun tổng thể và có thể hữu ích cho những người khác, bạn có thể muốn đóng góp vào nguồn gốc trên github và tìm kiếm thay đổi được triển khai.

Nếu đây là chức năng độc quyền cần thiết và không giúp ích cho sự phát triển của mô-đun, điều tốt nhất nên làm là tách nó khỏi github và thực hiện các thay đổi của bạn. Bạn có thể cài đặt các mục trực tiếp từ github bằng cách sử dụng NPM và phương pháp này sẽ cho phép bạn tích hợp các thay đổi trong tương lai vào phiên bản tùy chỉnh của bạn từ nguồn gốc.

Để cài đặt trực tiếp từ github, hãy sử dụng lệnh sau:

npm install https://github.com/<username>/<repository>/tarball/master


2
Cảm ơn! Đó chính xác là những gì tôi muốn biết. Ngoài ra, cho người khác đọc bài viết này ... Tôi muốn để bao gồm các mô-đun đó là trên github của tôi trong tập tin package.json, và có thông tin ở đây về điều đó: stackoverflow.com/a/8306715/1810875
user1810875

22
trước khi fork, tôi đang thay đổi nó trong hệ thống cục bộ, nhưng thay đổi này dường như không ảnh hưởng. Thay đổi bất kỳ tệp javascript nào là node_modules / package_name / lib / file_name.js có ảnh hưởng gì không?
tò mò

1
Chỉ là một lưu ý, không chắc liệu có gì đó đã thay đổi hay không nhưng cá nhân tôi phải chỉ định URL Git là git: //github.com/ <user> / <package> .git "
Craig

5
@JohnDevor Thay vì cài đặt các mô-đun tùy chỉnh, sử dụng "liên kết NPM" lệnh để chỉ cần tạo một sym-link vào thư mục của nó: docs.npmjs.com/cli/link
Venryx

3
Tìm ra rồi, tôi phải điều hướng đến thư mục trong đó /node_modulesvà chạy npm installthì mọi thứ đều ổn!
Adam Moisa

6

Bạn có thể sử dụng gói bản vá để thực hiện và duy trì các thay đổi đối với mô-đun nút.

Điều này có thể được thực hiện bằng cách đầu tiên thực hiện các thay đổi đối với gói bên trong node_modulesvà sau đó chạy lệnh sau, với <package name>tên của gói bạn vừa thực hiện thay đổi.

npx patch-package <package name>

patch-package sau đó sẽ tạo một patchesthư mục có tệp bên trong, đại diện cho các thay đổi của bạn. Sau đó, tệp này có thể được cam kết thành git và các bản vá lỗi có thể được khôi phục sau đó bằng cách chạy npx patch-package(không có bất kỳ đối số nào).

Bước tùy chọn:

Thêm đoạn mã sau vào phần script của package.json để tự động vá phần phụ thuộc khi bạn thực thi "npm install".

"postinstall": "npx patch-package" 

1
Giải pháp rất tốt đã làm việc cho tôi mà không có bất kỳ vấn đề nào.
ヨ ハ ン ソ ン

điều này thực sự tuyệt vời! FYI: Tôi đã phải sử dụng "cài đặt trước" thay vì "cài đặt sau" vì bản vá của tôi là tập lệnh cài đặt sẵn của phần phụ thuộc. Bạn sẽ thực hiện điều đó như thế nào nếu bạn có các bản vá lỗi khác cần được áp dụng trong giai đoạn cài đặt?
Superole

1
Câu trả lời đáng kinh ngạc, tôi cần phải sửa đổi một dep trước khi triển khai netlify. cài đặt sẵn 'gói vá npx' là chiếc vé kỳ diệu. Hình ảnh thích hợp hiện được hiển thị trên trang web.
TheBetterJORT

1

Tôi không muốn xuất bản một mô-đun mới và tôi cũng không muốn npm installghi đè các thay đổi của mình. Tôi đã tìm thấy giải pháp cho cả hai vấn đề này, nhưng có lẽ sẽ tốt hơn nếu nghe theo lời khuyên của @ Sdedelbrock. Nhưng nếu bạn muốn làm điều đó, đây là cách thực hiện:

  1. Chỉnh sửa package.jsontệp của bạn để xóa phần phụ thuộc bạn muốn chỉnh sửa.
  2. Đi vào dự án của bạn /node_modulesvà di chuyển thư mục đến một nơi khác trong kho lưu trữ của bạn có thể được cam kết. Vì vậy, bây giờ /node_modules/dependencylà lúc/dependency
  3. cd vào thư mục phụ thuộc và nhập npm link
  4. cdvào thư mục gốc của thư mục dự án của bạn và nhập npm link dependency Điều quan trọng là bạn phải thực hiện việc này bên ngoài /node_modules/dependency

Nếu mọi thứ đều hoạt động, bây giờ bạn sẽ có một liên kết biểu tượng đã được tạo /node_modules/dependency. Bây giờ bạn có thể chạy dự án của mình để xem nó có hoạt động hay không.

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.