我为 Grafana 创建了几个脚本仪表板。我即将创建另一个。我从一个脚本到另一个脚本创建和复制了各种实用函数。我宁愿采用良好的编程实践并导入代码而不是复制粘贴。
可以这样做吗?如果是这样,一个人会怎么做?
我为 Grafana 创建了几个脚本仪表板。我即将创建另一个。我从一个脚本到另一个脚本创建和复制了各种实用函数。我宁愿采用良好的编程实践并导入代码而不是复制粘贴。
可以这样做吗?如果是这样,一个人会怎么做?
是的,这是可以做到的。 这个链接表明可以使用SystemJS.import(),虽然我没有尝试过。
这个 github repo提供了一个使用不同技术的详细示例。尽管在精简的Grafana 脚本仪表板文档中没有提到它,但某些版本的 lodash.com(提交以包括 lodash)和 jquery 似乎可用于所有脚本仪表板。
这个 repo 的所有者 anryko 已经想出了如何使用这两个库来引用您自己的实用程序脚本,就像您正在谈论的那样。
所有脚本仪表板都有一个主脚本;getdash.sh是 anryko 的主脚本,如 README.md 上的破折号 URL 所示:
http://grafanaIP/dashboard/script/getdash.js
如果您查看getdash.sh的末尾,您会看到这一行引用了其他用户(您)提供的脚本中的代码:
var dash = getDashApp(datasources, getDashConf());
例如:
下面是getdash.js使用 jquery 和 lodash 加载源文件的部分:
// loadScripts :: [scriptSourceStr] -> Promise([jQuery.getScript Result])
var loadScripts = function loadScripts (scriptSrcs) {
var gettingScripts = _.map(scriptSrcs, function (src) {
return $.getScript(src);
});
return Promise.all(gettingScripts);
};
这是上述 _.map 的 lodash文档。
函数 scriptedDashboard()(也在getdash.js中)调用上面的 loadScripts(),将源文件的路径传递给它,如下所示:
loadScripts([
'public/app/getdash/getdash.app.js',
'public/app/getdash/getdash.conf.js'
]).then(function () {
老实说,我还没有进一步深入了解这一切如何使实用程序代码“可引用”。