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


Pair With Me!
Comments? Contact me via Twitter or e-mail.