模块调用
jmms内置了一个简单的模块加载系统(类似Node.js,做了简化),有关概念可以通过Node.js文档了解。
通过全局命名调用
const redis = require('redis');
const cache = require('redis/cache');
通过相对路径调用
const util = require('./util');
从 Y
模块中 require(X)
:
1. `X`是相对路径
a. 如果`Y`没有文件路径,抛出错误
b. 根据`Y`的文件路径加载模块返回
2. `X`不是相对路径
a. 在`app/modules/`中搜索
b. 搜索`app/entities`和`app/models`中的模型
c. 在`classpath:jmms/modules/`中搜索
d. 在`classpath:META-INF/jmms/modules/`中搜索
e. 在jmms内置的模块中搜索
d. 在Leap或者Spring的Bean中搜索
加载模块
- 加载文件 (X)
1. 如果`X.js`是一个文件,加载 X.js 作为 JavaScript 文本
2. 如果`X.json`是一个文件,加载 X.json 成一个 JavaScript 对象
- 加载索引(X)
1. 如果`X/index.js`是一个文件,加载 X/index.js 作为 JavaScript 文本
2. 如果`X/index.json`是一个文件,加载 X/index.json 成一个 JavaScript 对象
- 加载目录(X)
1. 如果 X/package.json 是一个文件
a. 解析 package.json,查找`main`属性
b. let M = X/{main}
c. 加载文件(M)
d. 加载索引(M)
2. 加载索引(X)
- 加载Bean(X)
1. 加载 id='jmms.modules.X' 的bean
2. 加载 namespace='jmms.modules', name=X 的bean (只支持Leap)