jsdk-offical
Version:
JSDK is the most comprehensive TypeScript framework, like JDK.
135 lines (115 loc) • 4.72 kB
Markdown
## 类库配置
假设一个名为xyz的类库(版本1.0.0)需要被JSDK管理,那么你需要完成以下步骤。
1. 创建目录:<code>/{PROJECT_ROOT}/libs/xyz/1.0.0/</code>, 拷贝以下文件至上述目录中:
```
xyz.js
xyz.min.js
xyz.css
xyz.min.css
xyz.d.ts
```
- *备注:压缩文件和d.ts定义文件最好有但非必须*
2. 打开文件 <code>/{PROJECT_ROOT}/libs/jsdk/{JSDK-VERSION}/jsdk-config.js</code>,添加新类库配置项:
```javascript
JS.config({
...
libs: [
...
xyz: [
'$abc',//假设其依赖已有类库abc
'~/xyz/1.0.0/xyz.css',
'~/xyz/1.0.0/xyz.js'
]
]
});
```
3. 你就可以用<b>JLU</b>格式加载此类库了:
```javascript
/// <reference path="{PROJECT_ROOT}/libs/xyz/1.0.0/xyz.d.ts" />
JS.imports('$xyz').then(()=>{ //$xyz is JLU format
//your code
});
```
### JSDK全局配置
<code>jsdk-config.js</code>是全局配置文件。<br>
你可以直接修改此文件,也可以在代码中动态覆写其配置项:
```javascript
JS.config({
closeImport: boolean, //True指示JSDK将关闭动态加载。比如:类库可能已在html中静态加载过。
cachedImport: boolean|string, //False则会在每个URL后添加时间戳"_={now}"以阻止缓存;String则会添加"_={string}"的自定义时间戳。
minImport: boolean, //True指示JSDK将加载JS或CSS资源的最小化文件(.min结尾的文件)。
jsdkRoot: null|string, //JSDK自库的根网址。缺省为null时表示JSDK库部署在{libsRoot}/jsdk/{JSDK-VERSION}下;其他网址时表示部署在该网址。
libRoot: string, //第三方类库的根网址。
libs: {
...
}
})
```
- *备注:如果采用代码中覆写配置项,则仅在此页面内生效*
### JLU规范
JLU(JSDK Library URI)是JSDK为类库加载而定义的统一URI格式。
- Format 1
<p class="warn">
http(s)://domain/path/xxx.{js|css|html}(#async)
</p>
- Format 2
<p class="warn">
${libName}
</p>
- Format 3
<p class="warn">
~/{libName}/x.y.z/xxx.{js|css|html}(#async)
</p>
说明:
> 1. 符号 $ 表示后面是类库名。举例:"$xxx" 表示类库"xxx"。
>
> 2. 符号 ~ 表示类库的根目录。举例:"~/path/xxx.js"的路径等价于 "{libRoot}/path/xxx.js"。
>
> 3. 以"#async"结尾的URI指示JSDK以异步方式加载此资源,否则以同步方式加载。
## 加载类库
例如:在页面上显示一个JSFX按钮,需要加载JSFX类库:
```javascript
JS.imports([
'$jsfx'
]).then(() => {
new Button({
id: 'btn1',
text: 'This is button1'
});
})
```
## JSDK模块
JSDK被划分成多个模块(类库)。最底层的核心模块是<b>jscore</b>,包含了全部的工具类、反射、注解、线程、切面等基础功能;最上层的模块是 <b>jsvp</b> 和 <b>jsfx</b>。在实际开发中,你可以不必加载整个<code>jsdk.js</code>,而是仅仅加载你需要的模块。
### 模块清单
模块名|备注|所含包|自身模块依赖|第三方库依赖|最小尺寸
---|---|---|---|---|---
jscore|micro kernel|JS.core.* ||No|4 kb
jslang|basic module|JS.util.* <br>JS.net.* <br>JS.lang.* |jscore|No|74 kb
jsugar|syntax sugars:<br>reflect/annotation/aop/mixin|JS.sugar.* |jslang|No|28 kb
jsds|data structures+stores|JS.ds.*<br>JS.store.* |jslang |No|13 kb
jsmedia|audio+video|JS.media.* |jsds |No|5 kb
jsmath|math tools|JS.math.* |jslang |No|38 kb
jsan|animations|JS.an.* |jslang |No|18 kb
js2d|2d drawing|JS.d2.* |jsmath |No|9 kb
jsui|ui+events|JS.input.*<br>JS.ui.* |jsds |Optional:<br>clipboard/polymer|16 kb
jsmvc|model+views+component|JS.ioc.* <br>JS.model.* <br>JS.view.* |jsugar<br>jsui |Optional:<br>handlebars|29 kb
jsfx|widgets |JS.fx.* |jsmvc|Yes|js: 112 kb<br>css: 104 kb
jsvp|app framework|JS.app.* |jsmvc|No|4 kb
jsunit|unit-test framework|JS.unit.* |jsugar|Optional:<br>ua-parser|js: 9 kb<br>css: 669 b
jsdk|all above modules|JS.* ||Yes|js: 338 kb
### 自定义模块
当你需要更小尺寸的模块文件,你可以修改build/目录下的构建脚本,去掉不需要用到的类或包,重新构建出自定义的模块文件。
比如,你不需要用到JSFX中的Button类,你可以从jsfx库的构建脚本中去掉JS.fx.Button。具体操作如下:
1. 打开build/jsfx.json文件,删除此行:
```
"../source/fx/Button.ts",
```
2. 保存后执行构建命令:
```
./build-module.sh jsfx
```
执行后,dist/目录下的jsfx.js及jsfx.min.js里不再包含Button类。
<p class='tip'>
警告:<br>
某些类可能被其他类所引用,所以去掉这些类前请确认那些其他类不会被用到。
</p>