
NetGREP ist eine experimentelle Portierung von RIPGrep auf WASM unter Verwendung des HTTP -Protokolls. Der Umfang dieses Projekts besteht darin, eine praktikable Alternative zu indexbasierten Suchmaschinen für Anwendungen mit einer kleinen Dateibasierten Datenbank bereitzustellen. Es verwendet eine Gabel des ursprünglichen ripgrep -Repositorys mit gerade genügend Änderungen, um es auf WASM auszuführen.
Im Moment wird NetGrep nur erkennen, ob ein Muster in einer Remotedatei vorhanden ist, die die ripgrep -Kernsuchmaschine nutzt. Dies geschieht , während die Datei heruntergeladen wird, um die Leistung zu maximieren.
Hinweis Die Suche nach Posts in einem Blog, das über einen statischen Site-Generator erstellt wurde, ist ein interessanter Anwendungsfall für dieses Experiment. NetGREP könnte leicht verwendet werden, um eine Echtzeit-Suchmaschine aus den Roh Post-Dateien zu erstellen. Ein Live -Beispiel für dieses Verhalten finden Sie in meinem Blog (Sie können sich den Quellcode ansehen).
WARNUNG Im Moment wird diese Bibliothek nur als ESM exportiert, daher muss ein Bundler wie WebPack sie verwenden.
Beachten Sie, dass dieses kurze Tutorial davon ausgeht, dass Webpack 5 der in der Anwendung verwendete Bundler ist, in dem
netgrepintegriert wird. Ein vollständiges Beispiel ist imexampleerhältlich.
Installieren Sie zunächst das Modul:
# Using yarn
yarn add @netgrep/netgrep
# Using npm
npm install @netgrep/netgrep Das asyncWebAssembbly -Experiment -Flag sollte in der webpack.config.js aktiviert werden:
module . exports = {
//...
experiments : {
// ...
asyncWebAssembly : true ,
} ,
} ; Dann ist es möglich, netgrep direkt auszuführen, während die gebündelte WASM -Datei asynchron im Hintergrund geladen wird:
import { Netgrep } from '@netgrep/netgrep' ;
// Create a Netgrep instance, here it's
// possible to pass an initial configuration.
const NG = new Netgrep ( ) ;
// Execute a Netgrep search on the url using
// the given pattern.
NG . search ( "url" , "pattern" )
. then ( ( output ) => {
console . log ( 'The pattern has matched' , output . result )
} ) ;
// It's possible to pass custom metadata during
// the search. These will be returned back in the result
// for convenience.
NG . search ( "url" , "pattern" , { post } )
. then ( ( output ) => {
console . log ( 'The pattern has matched' , output . result )
console . log ( 'Metadata' , output . metadata )
} ) ;
// There is a convenient method to do batched searches
// to multiple urls. Using `searchBatch` the resulting `Promise`
// will resolve only after the completion of all the searches.
NG . searchBatch ( [
{ url : 'url1' } ,
{ url : 'url2' } ,
{ url : 'url3' }
] , "pattern" )
. then ( ( outputs ) => {
outputs . forEach ( ( output ) => {
console . log ( `The pattern has matched for ${ output . url } ` , output . result )
} ) ;
} ) ;
// If you want to avoid waiting for the completion of
// all the searches, the method `searchBatchWithCallback` will
// execute a callback every time a search completes.
NG . searchBatchWithCallback ( [
{ url : 'url1' } ,
{ url : 'url2' } ,
{ url : 'url3' }
] , "pattern" , ( output ) => {
console . log ( `The pattern has matched for ${ output . url } ` , output . result )
} ) ; NetGrep steht unter der MIT -Lizenz.