kbs-dsl 的解析器。引用如下:
import resolve, { registerToGlobleScope } from 'kbs-dsl-resolver';
通过 registerToGlobleScope
可以在解析 dsl 之前注册全局方法。这是一个既是一个扩展的接口,也是一个提升性能的接口。解析器默认会把 @babel/runtime/helpers
通过 registerToGlobleScope
注册到全局。如下:
import * as helper from './utils/babel-runtime-helpers';
registerToGlobleScope({
...helper
});
注意,通过 kbs-dsl-resolver
解析的 dsl 会共享一个顶层作用域,而这个顶层作用域就是本文提及的全局。
使用 kbs-dsl-maker 产生的 dsl 便是标准的 dsl。如果开发者改造了「kbs-dsl-maker」将把 libaryTarget 从 umd
改成其它值的话,可能没办法使用此方法。
resolve 方法支持的 libaryTarget 选项为:
- umd
- commonjs
- commonjs2
使用如下:
import resolve from 'kbs-dsl-resolver';
const MyComponent = resolve(dslJson).default; // 使用 commonjs 打包的组件
受限于微信环境,目前 kbs-dsl-resolver
只支持四种 libaryTarget,即: umd, commonjs, commonjs2 和 var,其它选项需要开发者自己定制开发解决。
使用 var 选项,在解析时不能使用标准的 api,需要按以下方式解析:
import { dslResolve, createModuleScope } from 'kbs-dsl-resolver';
const moduleScope = createModuleScope();
const dslList = Array.isArray(dslJson) ? dslJson : [dslJson];
dslList.forEach(dsl => {
// @ts-ignore
dslResolve(dsl, moduleScope);
});
// 通过 moduleScope.varScope 来访问,假设 libary 取名为 app
const MyComponent = moduleScope.varScope.app;