Arkadaşım ilginç bir soru sordu ve birkaç şey denedim ama boşuna, bir Node JS modülünü geçersiz kılacak bir yolu var mı? Örneğin, dosya sistemi yerine S3 kovası kullanmak için readFile işlevini geçersiz kılmak istiyorum. IE:Düğüm JS standart modül geçersiz kılma
var fs = require('fs');
fs.readFile('my_text_file.txt', ...);
Aslında prototip denedim bu
FileSystem.readFile = function() {
// Connect to S3 and retrieve remote file
}
gibi bir şey çalışır ama onlar __proto__
nesne olmadan yerli modülleri kurdum görünüyor, onlar .constructor
özelliği yok Bu kimseye bir şey ifade eder.
Nodes VM'u kullanmayı düşündüm ancak kullanıcının npm
aracılığıyla modülleri takabilmesini ve kullanmasını istediğimden bu çok katı.
Aslında yeni bir modül yaratıyor geldim yakın (benim node_modules
klasöründe fs.js
adlı bir dosya koymak ve bunu gerektirir olamaz çünkü; bu sadece yok sayılır) ve sadece için fs
değerlerini sabit ayar İstediğim ama bu tam olarak doğru değil, kullanıcının require('fs')
kullanmasını ve özel işlevimi kullanmasını istiyorum.
Bu, kendi sürüm Node JS'yi derlemeden mümkün mü?
node.js ile çalışmıyorum, bu hiç işe yaramayabilir. Hangi fonksiyonun 'FileSystem''ı ilan ettiğini görebilir ve sonra bunu özel nesnesiniz için bir prototip olarak kullanabilir (" subclass "). MyFS = {FileSystem.call (this);}; MyFs.prototype = yeni FileSystem(); Veya goog.base ve goog.inherit gibi bir şeyi kullanarak "ana" işlevlerini ve kurucuya iletilen parametreleri içeren bir alt sınıf oluşturun: http://docs.closure-library.googlecode.com/git/closure_goog_base. js.html Not badse ecma 5 katı çalışmıyor 'arguments.callee.caller' kullanır, bu yüzden bunu yazmak zorunda. – HMR
goog.base ve goog.inherits hakkında iyi bir yazı burada: http://bolinfest.com/essays/googbase.html – HMR
Açıklama yapmak için 'FileSystem'ı hazırladım, modüller' __proto__' nesnesine sahip değil ve Böylece kurucu yok. Ben en yakın ben nesne üzerinde özellikleri ayarlamak ve başka bir betik dahil ama ben '(' fs ') 'gerektirir ve benim özel işlevsellik var –