調査の開始にあたって
プラグイン(さしあたりTagプラグインを想定)の実装中にて参照できる変数やオブジェクトを、調べてまとめよう。
ドキュメント | Node.js、 Process 等もためになる。
ところで、Node.jsでは、グローバルな空間を参照するためのキーワードがある。
global
である。
また、次のようなやり方で参照する方法もあるようだ。
const { inspect } = require('util'); var g = Function('return this')(); console.log(inspect(g, { depth: 0 }));
|
これらを駆使しつつ、Hexoの場合には、私が見たところほとんど全ての場所で、hexo
という、トップレベルの変数が見えるので、これを足がかりにしたい。
また、他にも使える要素がもしあるなら、確かめたい。
グローバル汚染はなかった
調査を進めてから理解できたことだが、Hexoではグローバル変数、またはグローバル・オブジェクトを使ってはいない。
何らかのプラグインで、グローバルを意図して使うのならばともかくとして、少なくともHexoの本体と言える範囲や、純正/バンドルされた各プラグインでは、グローバル変数は使わないようだ。いわゆる「グローバル汚染」はない。
プラグイン含めて各所で見かけるhexo
という変数が存在し、トップレベルの階層にあるし、自ら呼び出しているわけでもないので、私は当初これがグローバル変数なのかな?と勘違いしていました。
しかしこれは、実際には、module.exports
の仕組みによって与えられたもので、各モジュール(概ね各jsファイルに相当)毎にそれぞれエクスポートされていました。
私はこれまでmodule.exports
について理解していないままでしたが、今回勉強になりました。
(調査中)
Hexoオブジェクト
{ _events: [Object: null prototype] {}, _eventsCount: 0, _maxListeners: undefined, base_dir: '/home/naoto/www/MyBlog/', public_dir: '/home/naoto/www/MyBlog/public/', source_dir: '/home/naoto/www/MyBlog/source/', plugin_dir: '/home/naoto/www/MyBlog/node_modules/', script_dir: '/home/naoto/www/MyBlog/scripts/', scaffold_dir: '/home/naoto/www/MyBlog/scaffolds/', theme_dir: '/home/naoto/www/MyBlog/themes/stage/', theme_script_dir: '/home/naoto/www/MyBlog/themes/stage/scripts/', env: [Object], extend: [Object], config: [Object], log: [Logger], render: [Render], route: [Router], post: [Post], scaffold: [Scaffold], _dbLoaded: true, _isGenerating: true, database: [Database], config_path: '/home/naoto/www/MyBlog/_config.yml', source: [Source], theme: [Theme], locals: [Locals] }
|
(進捗途中)