簡體   English   中英

在node.js中將一個模塊替換為另一個模塊

[英]Substitude one module for another in node.js

如果我有一個node.js應用程序,該應用程序具有數百個引用模塊的文件(例如下划線),並且我想用另一個模塊(例如lodash)替換該模塊,那么進行此替換的顯而易見的方法是全局名稱replace and switch刪除package.json文件中的模塊。

無論如何,是否只需要更改名稱所引用的模塊,以便當node.js看到require('moduleA')時,實際上卻加載了'moduleB'? 現在我知道這將導致命名混亂,因為從事該項目的任何人都將看到require('moduleA'),並且不知道正在加載的實際模塊是'moduleB',因此最終您可能希望使用第一個解。 我正在考慮的用例是,如果您想嘗試一些與API兼容的模塊的替代方案,以評估每個模塊的應用程序性能(例如)。

如果這是正在進行的事情,並且您希望保持經常以編程方式在選項之間切換的能力,例如在測試中:

而不是使用require("underscore"); 在整個代碼庫中,需要一個本地文件,而不是require("./lib/underscore"); ,並讓該文件有條件地重新導出下划線或其他庫:

if (global.USE_LODASH) {
  module.exports = require("lodash");
} else {
  module.exports = require("underscore");
}

如果這是一次性的事情,請在決定切換之前嘗試使用替代庫,並且您希望首先快速進行此測試,而無需在所有文件中進行查找和替換:

進入您的node_modules文件夾,刪除或重命名underscore文件夾,並建立一個名為underscore的符號鏈接到替換模塊的文件夾。 我不建議將其作為長期解決方案:再次運行npm install可能會撤消此黑客攻擊,並且大多數項目都選擇避免將node_modules文件夾檢查到其源存儲庫中。

嘗試使用mock-require模塊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM