Menggunakan Module NodeJS dengan Gulp
Indexing Algolia Object with Gulp
posted to Web on 12 April 2017
Saat dalam proses menambahkan fitur full text searching pada linhub, saya menggunakan Algolia untuk melakukan indexing. Proses indexing sendiri saya lebih memilih melakukan secara batch update, ketika membuat task untuk Gulp saya mengalami beberapa kali kegagalan. Hal ini dikarenakan saya menggunakan fungsi dari algoliasearch
seperti saya menggunakan fitur dari Gulp. Gulp pada dasarnya adalah sebuah task runner yang melakukan tugasnya dengan stream, hal ini yang memungkinkan kita dapat melakukan piping dengan fungsi .pipe()
pada stream yang dihasilkan.
Untuk menggunakan module
NodeJS dengan Gulp sebenarnya cukup mudah, seperti menulis Gulp Task pada umumnya. Namun tidak menghasilkan atau memproses stream, berikut adalah contoh task yang saya gunakan untuk melakukan indexing ke Algolia.
var algoliasearch = require('algoliasearch'),
algoliaAPPID = process.env.ALGOLIA_APPLICATION_ID,
algoliaAPIKEY = process.env.ALGOLIA_API_KEY,
algoliaINDEX = process.env.ALGOLIA_INDEX,
jsonlint = require('gulp-jsonlint');
gulp.task('json-proofer', function() {
return gulp.src('_site/algolia.json')
.pipe(jsonlint())
.pipe(jsonlint.reporter())
.pipe(gulp.dest('_site'));
});
gulp.task('algolia-index', function() {
var algoliaJSON = require('./_site/algolia.json');
return algoliasearch(algoliaAPPID, algoliaAPIKEY)
.initIndex(algoliaINDEX)
.saveObjects(algoliaJSON, function(err, content) {
if (err) {
console.log(err);
} else {
console.log(content);
}
});
});
Pada contoh diatas saya juga menambahkan task json-proofer
, hal ini dimaksudkan untuk memastikan bahwa JSON yang digunakan benar-benar error free. Pada task algolia-index
seperti yang sudah disebutkan, saya hanya memanggil fungsi pada umumnya tanpa harus melakukan stream. Berkas JSON yang saya gunakan adalah berkas yang dihasilkan dari Liquid, berikut adalah contoh JSON dari Liquid yang saya gunakan
---
layout: null
---
[
{% for post in site.posts %}
{
"date":"{{ post.date | date: '%s' }}",
"title":"{{ post.title }}",
"author":"{{ site.author.name }}",
"category": "{{ post.category }}",
"tags":"{{ post.tags | join: ',' }}",
"url": "{{ post.url | prepend: site.url}}",
"description":"{{ post.content | strip_html | strip_newlines | xml_escape | truncatewords: 50 }}",
"objectID":"{{ post.url }}"
}
{% unless forloop.last %},{% endunless %}
{% endfor %}
]
Nah PR yang tersisa sekarang hanya mengubah tampilan dari laman utama linhub …