您可以在您的項目中創建一個子包並鏈接到該包。你需要執行幾個文件:
首先創建該子包的文件夾,在我的情況:lib/superagent+logger
(相對於主項目文件夾)
名稱可以改變你希望,除了name
在下面的文件。
lib/superagent+logger/package.json
{
"name": "superagent",
"version": "0.1.0",
"description": "superagent wrapper that adds a global logger",
"main": "index.js",
"dependencies": {
"superagent": "latest"
}
}
的名字是假的SuperAgent重要的,不能改變
lib/superagent+logger/index.js
var superagent = require("superagent");
function logRequest(req){
//that's the part you'd want to implement
console.log('tracing signal to ', JSON.stringify(req.url));
}
function Smith(){ return superagent.apply(null, arguments).on('request', logRequest); }
Object.setPrototypeOf(Smith, superagent);
module.exports = Object.assign(
Smith,
{
Request(method, url){
return superagent.Request(method, url).on('request', logRequest)
},
agent(options){
return superagent.agent(options).on('request', logRequest)
},
Response(req){
return superagent.Response(req).on('request', logRequest)
},
acl(url, data, fn){
return superagent.acl(url, data, fn).on('request', logRequest)
},
bind(url, data, fn){
return superagent.bind(url, data, fn).on('request', logRequest)
},
checkout(url, data, fn){
return superagent.checkout(url, data, fn).on('request', logRequest)
},
connect(url, data, fn){
return superagent.connect(url, data, fn).on('request', logRequest)
},
copy(url, data, fn){
return superagent.copy(url, data, fn).on('request', logRequest)
},
delete(url, data, fn){
return superagent.delete(url, data, fn).on('request', logRequest)
},
get(url, data, fn){
return superagent.get(url, data, fn).on('request', logRequest)
},
head(url, data, fn){
return superagent.head(url, data, fn).on('request', logRequest)
},
link(url, data, fn){
return superagent.link(url, data, fn).on('request', logRequest)
},
lock(url, data, fn){
return superagent.lock(url, data, fn).on('request', logRequest)
},
"m-search": function(url, data, fn){
return superagent["m-search"](url, data, fn).on('request', logRequest)
},
merge(url, data, fn){
return superagent.merge(url, data, fn).on('request', logRequest)
},
mkactivity(url, data, fn){
return superagent.mkactivity(url, data, fn).on('request', logRequest)
},
mkcalendar(url, data, fn){
return superagent.mkcalendar(url, data, fn).on('request', logRequest)
},
mkcol(url, data, fn){
return superagent.mkcol(url, data, fn).on('request', logRequest)
},
move(url, data, fn){
return superagent.move(url, data, fn).on('request', logRequest)
},
notify(url, data, fn){
return superagent.notify(url, data, fn).on('request', logRequest)
},
options(url, data, fn){
return superagent.options(url, data, fn).on('request', logRequest)
},
patch(url, data, fn){
return superagent.patch(url, data, fn).on('request', logRequest)
},
post(url, data, fn){
return superagent.post(url, data, fn).on('request', logRequest)
},
propfind(url, data, fn){
return superagent.propfind(url, data, fn).on('request', logRequest)
},
proppatch(url, data, fn){
return superagent.proppatch(url, data, fn).on('request', logRequest)
},
purge(url, data, fn){
return superagent.purge(url, data, fn).on('request', logRequest)
},
put(url, data, fn){
return superagent.put(url, data, fn).on('request', logRequest)
},
rebind(url, data, fn){
return superagent.rebind(url, data, fn).on('request', logRequest)
},
report(url, data, fn){
return superagent.report(url, data, fn).on('request', logRequest)
},
search(url, data, fn){
return superagent.search(url, data, fn).on('request', logRequest)
},
subscribe(url, data, fn){
return superagent.subscribe(url, data, fn).on('request', logRequest)
},
trace(url, data, fn){
return superagent.trace(url, data, fn).on('request', logRequest)
},
unbind(url, data, fn){
return superagent.unbind(url, data, fn).on('request', logRequest)
},
unlink(url, data, fn){
return superagent.unlink(url, data, fn).on('request', logRequest)
},
unlock(url, data, fn){
return superagent.unlock(url, data, fn).on('request', logRequest)
},
unsubscribe(url, data, fn){
return superagent.unsubscribe(url, data, fn).on('request', logRequest)
},
del(url, data, fn){
return superagent.del(url, data, fn).on('request', logRequest)
}
}
);
//wrapper built and ready to use
console.log("Hello Mr Anderson\n");
並在實際項目:
/package.json
{
...
"dependencies": {
"superagent": "file:lib/superagent+logger"
}
}
和一個簡單的測試:
var request = require("superagent");
void request.get("http://google.de").end();
編輯:
我lib/superagent+logger/index.js
寫了一部分以前動態編譯並讓你感到困惑。
+沒有動態構建方法
-沒有動態構建方法
與模塊沒有surprizes,但它並不適應內superagent
執行/版本變化要麼;您必須手動執行此操作。
而當我讀這可能有一些方法,你想要刪除。我的主要目標是如何將這個包裝器注入/加載到實際項目中,而不是superagent本身。
你的'index.js'非常難讀,充滿了奇怪的語法選擇和正則表達式。小心解釋它實際上在做什麼?替換'superagent'方法? –
@John Doe。不,它根本不修改超炫。它包裝它。首先它爲superagent方法創建一個名爲「Smith」的包裝器,它爲superagent上的每個方法創建一個包裝器,該包裝器將調用轉發給相應的superagent方法並附加一個'.on('request',logRequest)'。 「怪異」部分創建一個動態函數體作爲一個字符串來命名包裝方法,並給它們相同的參數,......基本上只是糖的錯誤報告*(我猜3AM付出了代價)*。您可以記錄'methods'來檢出構建的函數體。我稍後添加一個更簡單的版本。 – Thomas
根本無法完成這項工作。爲什麼你使用本地文件,然後通過npm安裝呢?爲什麼不只是別名? –