D3.js 寓言D3地图样本
我正在尝试运行一个寓言,我发现它需要一个浏览器。 当我试图D3.js 寓言D3地图样本,d3.js,f#,fable-f#,D3.js,F#,Fable F#,我正在尝试运行一个寓言,我发现它需要一个浏览器。 当我试图 npm run build 在d3文件夹下进行编译 npm run build > @ build C:\...\d3 > node ../node_modules/fable-compiler fable-compiler 0.7.50: Start compilation... Compiled fable-import-d3\Fable.Import.D3.js at 03:00:47 Compiled d3\d
npm run build
在d3文件夹下进行编译
npm run build
> @ build C:\...\d3
> node ../node_modules/fable-compiler
fable-compiler 0.7.50: Start compilation...
Compiled fable-import-d3\Fable.Import.D3.js at 03:00:47
Compiled d3\d3map.js at 03:00:48
Bundling...
Bundled out\bundle.js at 03:00:48
但之后
npm start
浏览器位于http://localhost:8080/
获取未捕获错误,SCRIPT5009
未定义“符号”:
if (typeof globalObj.__FABLE_CORE__ === "undefined") {
globalObj.__FABLE_CORE__ = {
types: new Map(),
symbols: {
reflection: Symbol("reflection"),
}
};
编辑
上述问题只与IE11有关(与Chrome无关),通过添加
<script src="node_modules/core-js/client/core.js"></script>
其中queue.v1.js:14
是
function newQueue(concurrency) {
if (!(concurrency >= 1)) throw new Error;
因为并发性为零。。。(所有这些都是指寓言编译器0.7.50
) 服务器模块只是一个用于承载示例的自定义本地服务器。与Webpack和Webpack Dev服务器集成,因此不需要这样做。我已经更新了d3样品,你能试一试吗?新的示例还包括Babel插件,它可以自动在包中插入必要的多边形填充(如符号),这样您就不必担心core.js依赖性:)我已经通过定义()
而不是空的c.torqueue()
另一种更优雅的解决方案
根据链接到阿方索·加西亚·卡罗答案的新d3样本,我们可以将队列定义替换为
let queue() = importDefault "queue"
然后使用不带arg的简单queue()
小音符
请注意,使用
let queue = importDefault<unit->obj> "queue"
let queue=importDefaultobj>“队列”
使用Fable 1.0(与Webpack开发服务器集成)导入新示例不会导致任何错误。奇怪的是,fable compiler 0.7.50
中的importDefault
只是一个奇怪的行为,我认为Symbol
没有定义错误基本上意味着你需要添加对polyfill的引用,比如core.js:每天处理这些变化的最佳方式(这是js世界),但是添加对corejs的引用对我来说很有效:)@TomasPetricek是否也意味着——或者——在客户端或npm服务器端可能会有一个浏览器版本需要更新?还是只需添加我错过的参考资料?纯JS中的原始版本运行良好:Fable端口处理不是需要如此频繁的更新吗?Fable版本()引用了core.JS
。我相信在Fable编译期间也可以将其内联,但我不确定如何做到这一点。对不起,我还没有将回购示例更新到Fable 1.0 beta版。我只是为分行的d3map样本做的。你能试试吗?自述文件中有说明。@AlfonsoGarcia Caro谢谢!今晚晚些时候肯定可以。我自己写了一个答案来概括吉特的回答,但我更乐意接受你们其中一位的回答:-)再次感谢你们!出于好奇,1)是否有意义,是否仍有可能运行版本0.7修复上述错误,而不升级到新的beta版1.0?2) 尽管它被移植到了.fsx,但它严重依赖于JavaScript和D3库:利用更多F#的可能性在哪里?2之二)Visual Studio代码不理解某些D3行的语法是否正常?哪一个是合适的编辑器/IDE?1)我想是的,在这种情况下,我只需要在加载寓言代码之前,在您的网页中的脚本标记中核心js,正如Tomas在上面所评论的那样。2) 对于其他库(如React),已经创建了一个中间层,以便能够使交互在F#中更为惯用,但这当然需要维护工作。有很多LIB可以“简化”D3,我会选择一个,如果需要的话,为它创建中间层。3) 我认为VS代码/Ionide有时在使用点3次访问成员后不会自动完成。任何IDE都可以,但并非所有IDE都支持新的项目格式。“正如Tomas在上面评论的那样,在加载寓言代码之前,我只想在您的网页中的脚本标记中核心js。”很抱歉造成了很多混乱!好吧,托马斯是对的,Symbol undefined
已经解决了,事实上我的问题不同了,我已经把它发布了newQueue(queue.v1.js:14)处的未捕获错误
即if(!(concurrency>=1))抛出新错误代码>和并发性为0。。。我知道你的解决方案是完美的,但我的要求只是为了理解和修复旧版本的错误。。。
queue(2)
let queue() = importDefault "queue"
let queue = importDefault<unit->obj> "queue"