模板节点本地库导入
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
个节点放入我的流程中:
在 "Template Type" select 下 "Added to site <head>
section" 并将 link 添加到库的 url:
<script src="url/to/library.js"></script>
(在您的离线情况下将是本地 url)
直接在模板内使用库导出的对象,不用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 更新将不会覆盖您的静态文件。
我必须在大多数情况下设置 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
个节点放入我的流程中:
在 "Template Type" select 下 "Added to site
<head>
section" 并将 link 添加到库的 url:<script src="url/to/library.js"></script>
(在您的离线情况下将是本地 url)
直接在模板内使用库导出的对象,不用
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 更新将不会覆盖您的静态文件。