使用 browserify 捆绑 D3 库的问题

Issue with using browserify to bundle D3 library

我想学习D3库。所以我通过 npm 安装了它。一段时间后,我在 svg 对象上应用 t运行sition 时遇到了问题(请在此处查看我的原始问题:transision() causes Uncaught TypeError with D3 version 7.2.1)。我被建议捆绑图书馆来解决这个问题。

我一直在努力使用 browserify 捆绑 D3 库。我已经完成了这些步骤:

  1. 在模块文件中使用 require 函数并将其作为参数提供库名称 ("d3")
  2. 在 html 文档中引用了模块文件和 bundle.js 文件
  3. 在包含模块文件的目录中 运行 命令:browserify module.js > bundle.js

在我 运行 命令之后我得到了这个:

.....\node_modules\d3\src\index.js:1 从“d3-array”导出*; ^ ParseError: 'import' and 'export' may appear only with 'sourceType: module'

我完全不知道我做错了什么。

在我给你一个解决方案之前,我想给你实际问题的背景。

Browserify 允许您将多个 javascript 文件合并为一个文件。这实际上只是让您无需在 html.

中包含多个 <script> 标签

从我的角度来看,它是 webpack/rollup 更简洁、更简单的版本,但通用性较差。

D3 似乎是用支持 import/export 语句的 javascript 版本编写的,并使用 Rollup 将其转换为浏览器(和 browserify)可以理解的香草 javascript。

答案

导入已经转译的最终版本的 d3。

const d3 = require('d3/dist/d3');


// do something with d3 here
const targetElem = d3.select('#target');

targetElem.text('HELLO WORLD');