Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 找不到Chart.js-Moment.js!要使用时间刻度,必须在Chart.js之前包含它_Javascript_Angularjs_Node.js_Chart.js - Fatal编程技术网

Javascript 找不到Chart.js-Moment.js!要使用时间刻度,必须在Chart.js之前包含它

Javascript 找不到Chart.js-Moment.js!要使用时间刻度,必须在Chart.js之前包含它,javascript,angularjs,node.js,chart.js,Javascript,Angularjs,Node.js,Chart.js,我试图显示一个图表,显示过去30天的数据。该图表在与我的webpack开发服务器一起运行时工作。然而,当我构建它时,它失败了(npm运行构建)。它产生的错误是: (“找不到Chart.js-Moment.js!您必须先包含它 Chart.js使用时间刻度。下载地址为“) 我已经检查了在谷歌上找到的所有可能的解决方案,但似乎没有一个能解决这个问题。我已经按照要求包含了moment.js,但这会引发大量新错误,其中最主要的错误是moment.js中没有定义窗口。我还应该注意,当我在浏览器中检查元素时

我试图显示一个图表,显示过去30天的数据。该图表在与我的webpack开发服务器一起运行时工作。然而,当我构建它时,它失败了(npm运行构建)。它产生的错误是:

(“找不到Chart.js-Moment.js!您必须先包含它 Chart.js使用时间刻度。下载地址为“)

我已经检查了在谷歌上找到的所有可能的解决方案,但似乎没有一个能解决这个问题。我已经按照要求包含了moment.js,但这会引发大量新错误,其中最主要的错误是moment.js中没有定义窗口。我还应该注意,当我在浏览器中检查元素时,此错误显示:

已阻止跨源请求:同一源策略不允许读取 位于的远程资源 . (原因:缺少CORS标头“访问控制允许原点”)

我不认为这是原因,因为我正在成功地向后端的其他API发出GET请求,而它们不会抛出此错误。更重要的是,启用了CORS。下面包含了相关的代码

谢谢

let ctx = document.getElementById("canvas");
        this.chart = new Chart(ctx, {
          type: 'line',
          data: {
            labels: all_dates,
            datasets: [
              {
                data: cummulative_sums,
                borderColor: '#3cba9f',
                fill: false,
                label: 'Failures in past 30 days'
              },
              {
                data: comparison_cummulative_sums,
                borderColor: '#ce5fc3',
                fill: false,
                label: 'Failures 30 days prior'
              }
            ]
          },
          options: {
            legend: {
              display: true
            },
            scales: {
              xAxes: [{
                display: true
              }],
              yAxes: [{
                display: true
              }],
            }
          }
        });

解决CORS问题的一种方法是将数据作为填充JSON请求到客户端。以下是一个npm包,用于执行此操作:

它将作为承诺返回您的数据,然后您只需对其调用.json(),无需填充即可返回json:

fetchJsonp('http://internal-address:5000/api/service_info/tt?severity=2')
.then(data => data.json())
.then(data => console.log(data))

听起来这可能是一张绷带,但它可能会让你暂时摆脱束缚。

可能是你可以删除package-lock.json并重新安装一个npm,然后重新构建,看看问题是否仍然存在。

也许可以尝试
添加
而不是
npm安装
。您的问题让我想起了一个类似的问题,可能是通过IIRC解决的。

Chart.js有以下两个版本:

独立构建

档案:

dist/Chart.js
dist/Chart.min.js
dist/Chart.bundle.js
dist/Chart.bundle.min.js
捆绑构建

档案:

dist/Chart.js
dist/Chart.min.js
dist/Chart.bundle.js
dist/Chart.bundle.min.js
独立版本不包含moment.js,您必须包含它,但捆绑版本包含moment.js

添加捆绑版本将包括并修复以下问题:

<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.4.0/Chart.bundle.min.js"></script>


有小提琴吗?@stack-flo:我有一个类似的问题,我记得通过warn/npm显式添加了
momentjs
,并将其保存到dev_依赖项中。添加后尝试构建。@NimeshkaSrimal不幸的是,这是一个内部网应用程序,包括此图表在内的许多代码都无法正常工作。因为您的问题是关于
momentjs
找不到,您需要向我们展示您是如何添加脚本的,特别是
momentjs
这里看起来也有两个问题:1。缺少或未添加momentjs依赖项2。CORS与您的api有关。请不要把两者混淆。可能首先尝试使用虚拟数据。并解决下一个问题注意:由于chart.js 2.8不再有“bundle”版本。使用最新的chart.js版本时,此解决方案不再有效