模板节点本地库导入

template node local library import

我必须在大多数情况下设置 Node-RED 的离线安装,并且需要在模板节点中使用 "Chart.js" 库。目前我的工作方法是将 Chart.js 字典复制到 node-red-dashboard/dist/js 并使用 <script src= "js/chart.js/dist/Chart.min.js"></script> 导入它。但是当我想更新仪表板时,我需要再次复制所有内容。所以最好有一个永久的解决方案。

到目前为止,我还尝试了另外两种方法。对于这两个,我都将 Chart.js 安装到 .node-red 字典中。 首先我是这样尝试的:

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')

这里有没有人有正确解决这个问题的想法?不幸的是,节点没有向控制台抛出错误,所以我不知道这里出了什么问题。

提前感谢您提供的每一个提示或解决方案,

曼妮

当我想在我的节点红色仪表板中使用任何第 3 方图表库时,我将 2 ui_template 个节点放入我的流程中:

  1. 在 "Template Type" select 下 "Added to site <head> section" 并将 link 添加到库的 url:

    <script src="url/to/library.js"></script>
    

    (在您的离线情况下将是本地 url)

  2. 直接在模板内使用库导出的对象,不用require,如:

    <div id="myChart"></div>
    
    <script>
        var canvas = document.getElementById('myChart').getContext('2d');
        var chart = new ChartJs(canvas, { ... }
    </script>
    

诀窍是让您的本地 node-red 实例通过本地 url 为 ChartJS 库提供服务。为此,首先将此 require path 行添加到 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

现在您可以使用本地 url 服务本地文件 public\scripts\abc.js http://localhost:1880/scripts/abc.js 这样,对仪表板代码的 npm 更新将不会覆盖您的静态文件。