模块化
尽管我认为 Bob 插件代码量应该会比较小,可能核心逻辑也就是发送一个网络请求,然后进行数据解析之后回调到 Bob 主程序,但是为了更好地组织代码,仿照 Node.js 提供了模块化的功能。
你可以通过 require('path') 的方式来引入 JavaScript 脚本文件,如此一来,被引入的脚本文件就会变成一个模块,拥有了自己独立的命名空间。
暴露变量
假设现在插件根目录有个 test.js 文件,当它被作为一个模块被引入的时候,想要暴露一些变量给外界使用,可按照如下的写法:
js
function hello() {
$log.info('Hello world!');
}
function run() {
$log.info('Run!');
}
// 暴露变量给外界
module.exports = {
hello: hello,
run: run
};当然,也可以这么写。
js
exports.hello = hello;
exports.run = run;这样 hello 和 run 函数在引入该文件的地方就可以调用了。
引入模块
假设现在 main.js 文件中,要引入同级目录下的 test.js 模块,可以这么写:
js
var test = require('./test.js');
test.hello();路径
require 方法传入的路径最好是相对路径,当然,也可以是绝对路径。
相对路径以 ./ 或 ../ 开头,绝对路径以 / 开头。
每个插件所获取到的路径都是虚拟路径,并不是在电脑上的真实路径。虚拟路径具体体现为 / 代表插件根目录,而不是电脑文件系统的根目录。
所以就刚才的例子而言,'./test.js' 和 '/test.js' 的效果是一样的,后缀名 .js 可以省略。
考虑到安全性,插件只能加载插件目录下的脚本以及内置模块。如果利用相对路径回退到插件根目录之外,将无法加载到任何文件。
额外的变量
在模块内部除了可以使用 require、module.exports 以及 exports 之外,还可以使用以下变量:
__filename当前文件路径__dirname当前文件夹路径
当然,上面两个变量获取到的依旧是虚拟路径,/ 代表插件根目录。

