[英]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.