個人用メモ。今回は moment.js を使う方法。
2014/01/20: node.jsのpath.joinではなくlt.objs.files/joinを使うよう修正
2014/01/24: lt.objs.plugins/find-plugin の補足を追加
package.json の用意†
project.clj, plugin.json と同じディレクトリに作成する
npm init vim package.json
moment.js を dependencies に追加
"dependencies": { "moment": "~2.5.0" }
moment.js をインストール
npm install
プラグイン内で moment.js を利用する†
(ns lt.plugins.foo (:require [clojure.string :as string] [lt.objs.files :as files] [lt.objs.plugins :as plugins])) ;; プラグイン名。あとで使う (def PLUGIN_NAME "foo") ;; ユーザプラグインのディレクトリは lt.objs.plugins/user_plugins_dir から取得 ;; TODO: PLUGIN_NAME を使わないようにしたい。。 (def moment (js/require (files/join plugins/user_plugins_dir PLUGIN_NAME "node_modules" "moment"))) (defn foo-task [] (println (.format (moment) "YYYY-MM-DD HH:mm:ss")))
課題†
ソース内のコメントにも書いた通り、ユーザプラグインのディレクトリまでは取れるけれども、作っているプラグインのディレクトリまでは取得できないため、プラグイン名を定数としてもたざるを得ず気持ち悪いこと。良い解決策を知っている方がいれば教えていただけると助かります!
[2014.01.24 追記] Light Table 0.6.1 からは lt.objs.plugins/find-plugin が追加され、プラグイン名を渡せばプラグインのディレクトリが取れるようになりました。結局プラグイン名は必要ですが。。
(plugins/find-plugin PLUGIN_NAME) ; => (files/join plugins/user_plugins_dir PLUGIN_NAME) と同じ