【问题标题】:highcharts-export-server with highcharts-regression plugin in a node module throws an error节点模块中带有 highcharts-regression 插件的 highcharts-export-server 引发错误
【发布时间】:2021-10-13 23:27:59
【问题描述】:

我已经通过 npm 安装了 highcharts-export-serverhighcharts-regression 插件。这些都安装在我本地的项目目录中。我正在通过节点模块使用导出器。如果没有插件,这一切都可以正常工作并且正在导出图像。除了,当我包含 highcharts-regression 插件时,我收到一条错误消息,指出“无法读取未定义的属性‘数据’”。

我将导出器参数的选项对象上的 resources 属性设置为带有 files 属性的 json 字符串。

这是我的模块:

const exporter = require('highcharts-export-server');
module.exports = (callback, classRates) =>
{
    var exportSettings = {
        resources: "{ \"files\": \"https://cdn.jsdelivr.net/npm/highcharts-regression@2.2.0/highcharts-regression.min.js\" }",
        type: 'png',
        options: {
            title: {
                text: 'My Chart'
            },
            xAxis: {
                categories: ["Jan", "Feb", "Mar", "Apr", "Mar", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
            },
            series: [
                {
                    regresssion: true,
                    regressionSettings: {name:"reg", type: 'linear'},
                    type: 'line',
                    data: [[1, 1], [2, 3], [3, 2], [4,4]]
                },
                {
                    type: 'line',
                    data: [5, 3, 4, 2]
                }
            ]
        }
    };

    exporter.initPool();
    exporter.export(exportSettings, function (err, res)
    {
        callback(null, res.data);
        exporter.killPool();
        process.exit(1);
    });

};

我还阅读了有关在 node_modules/highcharts-export-server/build.js 文件中设置资源路径的信息。但我不确定该放在哪个数组中。

如何包含这个插件?

更新:有没有办法从导出器获取 highcharts 实例?这样我就可以自己导入 highcharts-regression 插件并在开始导出之前对其进行初始化。

【问题讨论】:

  • 更新:我已将对 highcharts-regression.js 文件的引用移至 build.js 并将其放在 cdnAdditional 数组中。现在我得到一个不同的错误:an error occured when rendering the chart: SyntaxError: Unexpected token S in JSON at position 0,在调用堆栈的更下方有一个不同的异常:SyntaxError: Use of reserved word 'let' in strict mode。所以我现在一无所知。
  • 更新 2:我从 build.js 中删除了插件,因为我意识到我没有在资源选项 (resources: "{ \"files\": [\"https://cdn.jsdelivr.net/npm/highcharts-regression@2.2.0/highcharts-regression.min.js\"] }") 中使用数组语法,所以我在我的模块中更新了它,它仍然对reading property data of undefined 抛出同样的错误。
  • 更新 3:添加了 --allowCodeExecution ,现在进程冻结了。这不应该那么难。
  • 更新 4:我将 allowCodeExecution: true 添加到选项对象中,并且必须摆脱 resources 属性中的数组语法。上面的更新 #3 过去了,现在我没有收到任何错误,只是看不到趋势线。

标签: highcharts


【解决方案1】:

好的,我搞定了。

首先添加allowCodeExecution 有帮助。 但是,一旦我开始在节点中调试highcharts-export-server 代码,我发现在highcharts-regression.js 中评估(通过injectJs)时,phantomjs 抛出了一个异常。

该模块使用for (let i=...。原来 phantomjs 不支持 let 关键字。这仅用于整个模块中的一行,因此我创建了一个本地副本并将其编辑为 for (var i=... 并解决了该问题。

现在我得到了我的趋势线。

但是我在同一张图表上也有一个“sma”系列。所以我不得不编辑node_modules/highcharts-export-server/build.js 文件并将stock/{{version}}/indicators/indicators.js 添加为cdnAdditional 条目。 如果你用谷歌搜索如何添加额外的 highcharts 模块,你会在他们的论坛上找到有关如何执行此操作的详细信息。基本上你编辑build.js,然后从你通过npm安装highcharts-export-server的根目录运行node build.js(或者你克隆它的位置)。

请注意,resources.files 属性需要格式良好的 JSON 字符串。它需要是一个逗号分隔的文件系统路径或 URI 列表(以 http 开头)。此属性不需要字符串数组。只是一个字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-14
    • 1970-01-01
    • 1970-01-01
    • 2015-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多