Argumentem require(...)
w pliku node.js jest nazwa pliku. Gdybym miał kod źródłowy modułu w łańcuchucode
, czy mógłbym jakoś zadzwonić pod numer require(code)
i wczytać funkcje z tego łańcucha?Wymagane w nodejs
Odpowiedz
Dzieło wokół może być napisać kod źródłowy modułu do pliku tymczasowego, a następnie require('./tmp-file')
./tmp-file.js
, a następnie usunąć plik.
Prawdopodobnie nie jest to optymalne, ponieważ trzeba by synchronizować i zapisywać plik synchronicznie lub umieścić wszystko, co wymaga tego modułu w wywołaniu zwrotnym, do zapisu asynchronicznego.
przykład roboczych do zapisu plików asynchroniczny (gist - also includes sync file write):
var http = require('http');
var fs = require('fs');
var helloModuleString = "exports.world = function() { return 'Hello World\\n'; }";
fs.writeFile('./hello.js', helloModuleString, function (err) {
if (err) return console.log(err);
var hello = require('./hello');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end(hello.world());
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');
});
Skutkuje:
$ curl 127.0.0.1:1337
> Hello World
Dzięki, brzmi jak dobre rozwiązanie bazowe. – Cartesius00
Ogólnie zgadzam się, ale to wymaga aplikacji węzła, aby można było utworzyć plik w systemie plików. A jeśli uruchomisz wiele instancji aplikacji węzła, musisz zdecydować, co zrobić z plikiem lub przestrzenią nazw w jakiś sposób. Próbowałem dodać niestandardowe rozszerzenie, ale obecnie jest ono przestarzałe. Czy nie ma innego dobrego rozwiązania? –
Ja to do funkcji do ponownego użycia. Tworzy plik w katalogu tymczasowym na podstawie losowego hasha, wymaga go, a następnie usuwa.
var fs = require('fs'),
os = require('os'),
crypto = require('crypto');
function requireString(moduleString) {
var token = crypto.randomBytes(20).toString('hex'),
filename = os.tmpdir() + '/' + token + '.js',
requiredModule = false;
// write, require, delete
fs.writeFileSync(filename, moduleString);
requiredModule = require(filename);
fs.unlinkSync(filename);
return requiredModule;
}
Następnie można zrobić:
var carString = "exports.start = function(){ console.log('start'); };",
car = requireString(carString);
console.log("Car:", car);
To jeszcze bardziej obejście, ale bardziej wygodny w użyciu, tak myślę.
ładne, dziękuję – Cartesius00
- 1. Nodejs: Kineticjs w nodejs
- 2. Korzystanie ng-wymagane vs wymagane
- 3. Sprawdź dziedziczenie w nodejs
- 4. Żądanie HTTPS w NodeJS
- 5. Uwierzytelnianie NodeJS w Firebase
- 6. Szyfrowanie w nodejs
- 7. Różnica czasu w Nodejs?
- 8. Błąd SSL w nodejs
- 9. Pętla console.log w nodejs
- 10. Sequelize w NodeJS: INNER JOIN Awaria realizacja
- 11. PHP SoapClient: Nie jest wymagane wymagane rozszerzenie WSDL
- 12. Schemat JSON: wymagane pole
- 13. nazw nie Zależności wymagane
- 14. Making 'Plik' obowiązkowe (wymagane)
- 15. JUnit opcjonalne/wymagane testy
- 16. Wymagane formaty Django
- 17. Wymagane biblioteki Angular 2
- 18. Wymagane pola wyboru AngularJS
- 19. Wymagane zatwierdzenie AngularJS Dropdown
- 20. nodejs: łańcuchach
- 21. zlokalizować ([Wymagane] [StringLength] itd.)
- 22. Wymagane porty Azure?
- 23. Django: wymagane razem?
- 24. wymagane puste pole php
- 25. NodeJS Passport
- 26. Nodejs streaming
- 27. Zmienne środowiskowe NodeJS w Grunt
- 28. Podanie błędu kodowania w nodeJS
- 29. Jak zabić dziecko w nodejs?
- 30. Javascript w performance.now() i Nodejs
http://nodejs.org/api/modules.html#modules_modules (co za niedorzeczne uri) – jAndy
@jAndy Gdzie jest kod źródłowy w ciągu znaków? Widzę tylko ładowanie z pliku. – Cartesius00
http://nodejs.org/api/modules.html – Thomas