最新ffandown 项目有需求需要支持平台直播的下载,那么就涉及到直播平台真实的地址的解析。
如果在项目内直接实现的话,那么就会面临:插件的每次维护需要单独发版本的问题。这个不要现实也不太友好,就像之前开源的抖音视频下载一样,每次都需要单独去 abog。而且动不动就挂了。
如果做插件系统呢?有什么好处?
插件每个人都可以开发,开发者可以不仅限作者
插件的维护不需要依赖主项目发版本
插件的多少可以由使用者自己确定,更加的灵活
那么怎么做呢?
直接看代码: makeParser
就是转换 js 文本为 class
类的函数。
这里定义DemoJsCode
为 class
的好处就是可以在原型上挂载常用的一些工具库,方便插件的开发。
// DemoJsCode 为 js函数的字符串
const DemoJsCode = "class Parser {init () {console.log('12')}}";
const makeParser = (jsCode) => {
const Parser = new Function(`return ${jsCode}`)();
const parser = new Parser();
return parser;
};
makeParser(DemoJsCode).init(); // output: 12
为什么不用eval 呢或者 exec?
eval
和 exec
都回面临一个问题:无法提供常用的库,而且 exec
执行的话需要提供 node
的环境才行。