模板节点本地库导入

时间:2018-02-05 16:20:15

标签: javascript node-red

我必须在大多数情况下设置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')

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

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

曼尼

1 个答案:

答案 0 :(得分:0)

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

  1. 在“模板类型”下选择“添加到网站<head>部分”并添加指向图书馆网址的链接:

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

    (在离线情况下将是本地网址)

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

    <div id="myChart"></div>
    
    <script>
        var canvas = document.getElementById('myChart').getContext('2d');
        var chart = new ChartJs(canvas, { ... }
    </script>
    
  3. 诀窍是让您的本地节点红色实例通过本地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更新将不会覆盖您的静态文件。