我必须在大多数情况下设置Node-RED的离线安装,并且需要使用&#34; Chart.js&#34;模板节点中的库。目前我的工作方法是将Chart.js的胜利复制到node-red-dashboard / dist / js并将其导入<script src= "js/chart.js/dist/Chart.min.js"></script>
。但是当我想要更新仪表板时,我需要再次复制所有内容。因此,有一个永久的解决方案将是很好的。
到目前为止,我尝试了另外两种方法。对于我,我将Chart.js安装到.node-red dictory。 首先我试着这样:
var canvas = document.getElementById('myChart').getContext('2d');
var ChartJs = require('Chart.js');
var chart = new ChartJs(canvas, {... }
在脚本标记中(...代表未编辑的工作图表代码),但它不起作用以及放置
functionGlobalContext: {chartjs:require('Chart.js')}
到settings.js并将require('Chart.js')
更改为global.get('chartjs')
这里有没有人有想法妥善解决这个问题?不幸的是节点没有向控制台抛出任何错误,所以我不知道这里有什么错误。
提前感谢每一个提示或解决方案,
曼尼
答案 0 :(得分:0)
当我想在节点红色仪表板中使用任何第三方图表库时,我将2个ui_template
节点放入我的流程中:
在“模板类型”下选择“添加到网站<head>
部分”并添加指向图书馆网址的链接:
<script src="url/to/library.js"></script>
(在离线情况下将是本地网址)
直接在模板中使用库的导出对象,而不使用require
,例如:
<div id="myChart"></div>
<script>
var canvas = document.getElementById('myChart').getContext('2d');
var chart = new ChartJs(canvas, { ... }
</script>
诀窍是让您的本地节点红色实例通过本地URL为ChartJS库提供服务。为此,首先在导出部分之前将路径行添加到 settings.js 文件中:
// The `https` setting requires the `fs` module. Uncomment the following
// to make it available:
var fs = require("fs");
var path = require ("path");
然后,取消注释下面的httpStatic部分,在导出中:
// When httpAdminRoot is used to move the UI to a different root path, the
// following property can be used to identify a directory of static content
// that should be served at http://localhost:1880/.
httpStatic: path.join(__dirname, 'public'),
(您可以使用任何目录名称代替public
) __dirname
引用node-red服务器的工作目录,通常是.node-red
下的主目录。
创建这个新的 public 目录,复制其下的ChartJS文件,然后重新启动node-red。在启动时,您应该在控制台日志中看到一行显示新静态文件位置的路径:
5 Feb 12:12:23 - [info] Settings file : C:\NODE\node_red_ui\settings.js
5 Feb 12:12:23 - [info] HTTP Static : C:\NODE\node_red_ui\public
5 Feb 12:12:23 - [info] User directory : C:\NODE\node_red_ui
现在,您可以使用本地网址提供本地文件public\scripts\abc.js
http://localhost:1880/scripts/abc.js
这样,对仪表板代码的npm更新将不会覆盖您的静态文件。