javascript - require ("d3") 有时返回 3 而不是对象

标签 javascript d3.js requirejs c3.js

在我们的 Grails 项目中,我们使用 c3.js(依赖于 d3.js)来显示图表。当部署在测试服务器上时,图表工作得很好。如果我在笔记本电脑上启动该应用程序,我根本看不到任何图表。

Chrome的控制台显示以下消息

Uncaught TypeError: Cannot read property 'category10' of undefined

经过一番调试后,我在 c3.js 中发现了以下几行:

function ChartInternal(api) {
    var $$ = this;
    $$.d3 = window.d3 ? window.d3 : typeof require !== 'undefined' ? require("d3") : undefined;
    $$.api = api;

我在这里设置了一个断点,并检查了 window.d3 的值(未定义)和 require("d3") 的值(数字 3)而不是一个对象!

我对 Javascript 和 require.js 没有太多经验,但我确信函数 require 应该返回一个对象而不是 int。

Chrome 显示 c3.js 和 d3.js 均已加载。

为什么部署在测试服务器上的相同代码可以正常工作,而部署在本地主机上却不能?有谁知道如何进一步调查此问题的原因吗?

更新1

我发现如果我从 Windows 计算机启动此应用程序,就会出现此问题。如果我从 Linux 计算机启动此应用程序,则不会出现此问题。在哪台计算机上使用浏览器并不重要。使用 Chrome 45.0.2454.85 m 和 Firefox 40.0.3 进行测试。

更新2

我刚刚发现 d3.js 包含许多希腊字母。该文件以 UTF-8 格式存储(根据 IntelliJ)。如果我在 Windows 计算机上的 Chrome 中打开该文件,希腊字符就会变成垃圾。奇怪的是,d3.js 请求的响应 header 显示使用了 UTF-8:

Cache-Control:no-cache, no-store, must-revalidate
Content-Type:application/javascript;charset=utf-8
Date:Tue, 15 Sep 2015 12:59:39 GMT
Expires:Thu, 01 Jan 1970 00:00:00 GMT
Pragma:no-cache
Server:Apache-Coyote/1.1
Transfer-Encoding:chunked

谁能告诉我为什么在 Windows 计算机上这不能正常工作?

最佳答案

终于找到问题的原因了。 This issue at Github指出 Grails 项目的 asset 目录中的文件不是 UTF-8 编码的。我将 VM 选项 -Dfile.encoding=UTF-8 添加到 IntelliJ 中的运行配置中,从而解决了问题。

关于javascript - require ("d3") 有时返回 3 而不是对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32519694/

相关文章:

javascript - AJAX 是如何工作的

javascript - 如何为D3折线图添加背景底纹

javascript - 从 CSV 文件中选择一些列

javascript - require 函数是 AMD 规范的一部分吗?

javascript - 如何创建具有默认功能和持久属性的 JavaScript 函数构造函数?

javascript - 如何创建类来获取 javascript

php - 需要帮助根据用户在第一个下拉框中选择的内容创建第二个选项下拉框

javascript - 如何从另一个有参数的函数调用带参数的函数?

javascript - 仅在加载主干 View 时需要依赖项

javascript - TypeError : fs. readFile 不是函数