
NetGrep es una portada experimental de RIPGrep en WASM usando el protocolo HTTP. El alcance de este proyecto es proporcionar una alternativa viable a los motores de búsqueda basados en índices para aplicaciones con una pequeña base de datos basada en archivos. Utiliza una horquilla del repositorio original ripgrep con los cambios suficientes para que se ejecute en WASM.
Por el momento, NetGrep solo va a decir si un patrón está presente en un archivo remoto que aprovecha el motor de búsqueda de núcleo ripgrep . Esto sucede mientras el archivo se descarga para maximizar el rendimiento.
Nota La búsqueda de publicaciones en un blog creado a través de un generador de sitios estáticos es un caso de uso interesante para este experimento. NetGrep podría usarse fácilmente para crear un motor de búsqueda en tiempo real a partir de los archivos de publicación RAW. Se puede encontrar un ejemplo en vivo para este comportamiento en mi blog (puede echar un vistazo al código fuente).
Advertencia en el momento en que esta biblioteca se exporta solo como un ESM, por lo tanto, se requiere un paquete como un paquete web para usarla.
Tenga en cuenta que este breve tutorial supone que Webpack 5 es el Bundler utilizado en la aplicación donde se integrará
netgrep. Un ejemplo completo está disponible en el paquete deexample.
En primer lugar, instale el módulo:
# Using yarn
yarn add @netgrep/netgrep
# Using npm
npm install @netgrep/netgrep El indicador de experimento asyncWebAssembbly debe habilitarse dentro del webpack.config.js :
module . exports = {
//...
experiments : {
// ...
asyncWebAssembly : true ,
} ,
} ; Entonces será posible ejecutar netgrep directamente mientras el archivo WASM engramado se cargará de forma asincrónica en segundo plano:
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 está bajo la licencia MIT.