stc-plugin
Abstract plugin class for stc
属性
file
文件对象,文件包含的属性和方法见 stc-file。
options
配置选项,即 stc.config.js
里设置的调用该插件的配置。
include
插件的 include 配置。
matches
插件的 include 配置匹配到的值。
stc
stc 对象。
TokenType
HTML 和 CSS 的 Token 类型,具体见 https://github.com/welefen/flkit#tokentype。
方法
getContent(encoding)
encoding
{String | null} 文件编码,默认为null
return
{Promise}
获取文件的内容,如果没有设置 encoding
,那么获取到的为文件内容对应的 Buffer。
async { let content = await this; }
setContent(content)
设置文件的内容。设置内容时,会清除掉文件已有的 AST。
该方法只能在插件的 update
方法里调用。
{ this; }
getAst()
return
{Promise<Array | Object>}
获取文件内容对应的 AST,对于 HTML 和 CSS,获取到的是 Token 列表。
async { let tokens = await this; }
setAst()
设置文件的 AST,设置 AST 时,会清除调文件的内容。
该方法只能在插件的 update
方法里调用。
{ this; }
addDependence(dependencies)
给当前文件添加资源依赖。
getDependence(file)
file
默认为当前处理的文件
获取文件的依赖。
addFile(file)
file
{String | Array}
添加一个文件到资源池中,如:多张小图片合并成一张大图片,需要将大图片添加到资源池中。
getFileByPath(filepath)
filepath
{String}return
{stc-file}
通过路径获取 stc-file 对象。
async { let file = this; }
invokeSelf(file)
file
{String | stc-file}return
{Promise}
对另一个文件执行当前插件。返回结果为该插件 run
方法的返回值。
async { let ret = await this; }
invokePlugin(plugin, file)
plugin
{Class}file
{String | stc-file}return
{Promise}
调用另一个插件。返回结果为调用插件 run
方法的返回值。
; async { let ret = await this; }
asyncReplace(content, replace, callback)
content
{String}replace
{RegExp}callback
{Function}return
{Promise}
通过正则异步替换内容,如:匹配内容中的地址,然后上传的 CDN,获取新的 URL 替换回去。
async { let ret = await this }
cache(name, value)
name
{String}value
{any}return
{Promise}
设置或者获取缓存。
// 读取缓存 async { let value = await this; }
// 设置缓存 async { let value = await this; }
插件执行过程中,每个文件之间是并行执行的,如果想让有些缓存在文件之间可以公用,可以通过下面的方式。
async { let value = await this; }
storage(name, value)
name
{String} 存储名value
{any} 存储值
获取或者存储值,存储后一直有效。同步方法。
concurrentLimit(fn, ignoreErrorFn, limit, key)
fn
{Function} 待执行的函数ignoreErrorFn
{Function} 出现错误后,哪些错误可以忽略的函数判断limit
{Number} 初始限制的数量key
{String} 默认为当前插件的名称
任务队列,避免并行任务开的太多导致报错。
this;
getContentFromUrl(url)
url
{String} 远程地址return
{Buffer}
获取远程地址内容。
workerInvoke(method, ...args)
在子进程调用主进程的插件实例方法 method ,并传递 args。 应用场景是在子进程执行中,涉及一些资源共享的而需要原子化的操作。比如每个子进程需要获取某个字符串的全局唯一 id(hash),可以把如下 注: args 必须是可以序列化的任意类型,由于进程通讯有性能损耗,所以如果在一次里面需要多次调用 workerInvoke,可以考虑合并调用。
var cacheInMaster = ; async { var id; ifisMaster id = this; else id = await this; } { var index = cachInMaster; ifindex === -1 index = cachInMaster; return index; }
createToken(type, value, referToken)
创建一个 Token,具体见:https://github.com/stcjs/flkit#createtokentype-value-refertoken
createRawToke(type, value, referToken)
创建一个 Raw Token,具体见:https://github.com/stcjs/flkit#createrawtokentype-value-refertoken
fatal(message, line, column, file = this.file)
抛出一个 fatal 错误,程序不再往下执行。
this;
error(message, line, column, file = this.file)
输出一条错误信息,程序继续执行。
只能在 update
方法中调用。
this;
warning(message, line, column, file = this.file)
输出一条警告信息,程序继续执行。
只能在 update
方法中调用。
notice(message, line, column, file = this.file)
输出一条提示信息,程序继续执行。
只能在 update
方法中调用。
run()
执行方法。耗时的任务在 run
里执行,然后将结果返回给 update
方法更新。
update(data)
更新方法,该方法里只能调用常用的方法,不能调用插件扩展的方法。
该方法的参数值即为 run
方法的返回值。
{ this;}
静态方法
include()
设置默认的 include
/** * default include */ static { return /\.js/; }
cluster()
是否开启 cluster。
static { return true; }
cache()
是否开启 cache。
static { return true; }
after(files, instance)
files
该插件匹配到的所有文件instance
当前插件的实例
插件对单一文件处理完后的统一处理。