
Netgrep - это экспериментальное портирование Ripgrep на WASM с использованием протокола HTTP. Объем этого проекта заключается в предоставлении жизнеспособной альтернативы поисковым системам, основанным на индексах, для приложений с небольшой базой данных на основе файлов. Он использует вилку исходного репозитория ripgrep с достаточным количеством изменений, чтобы сделать его заполненным на WASM.
На данный момент Netgrep просто сообщит, присутствует ли шаблон в удаленном файле, использующий поисковую систему ripgrep Core. Это происходит , когда файл загружается, чтобы максимизировать производительность.
Примечание по поиску сообщений в блоге, созданном через статический генератор сайтов, является интересным вариантом использования этого эксперимента. Netgrep можно легко использовать для создания поисковой системы в реальном времени из необработанных файлов Post. Живой пример для этого поведения можно найти в моем блоге (вы можете взглянуть на исходный код).
В настоящее время предупреждение этой библиотеки экспортируется только как ESM, поэтому для его использования необходимо такого пучка, как WebPack.
Обратите внимание, что этот короткий учебник предполагает, что WebPack 5 является связью, используемым в приложении, где будет интегрирован
netgrep. Полный пример доступен вexampleпакета.
Прежде всего установите модуль:
# Using yarn
yarn add @netgrep/netgrep
# Using npm
npm install @netgrep/netgrep Флаг эксперимента asyncWebAssembbly должен быть включен внутри webpack.config.js :
module . exports = {
//...
experiments : {
// ...
asyncWebAssembly : true ,
} ,
} ; Тогда можно будет выполнить netgrep напрямую, в то время как в фоновом режиме будет загружена файл WASM в комплекте:
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 находится под лицензией MIT.