【问题标题】:Issue with using browserify to bundle D3 library使用 browserify 捆绑 D3 库的问题
【发布时间】:2022-01-25 07:09:54
【问题描述】:

我想学习 D3 库。所以我通过 npm 安装了它。过了一会儿,我在 svg 对象上应用转换时遇到了一个问题(请参阅我的原始问题: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' 和 'export' 可能只与 'sourceType: module' 一起出现

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

【问题讨论】:

    标签: javascript d3.js bundle browserify


    【解决方案1】:

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

    Browserify 允许您将多个 javascript 文件合并到一个文件中。这实际上只是让您无需在 html 中包含多个 <script> 标签。

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

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

    答案

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

    const d3 = require('d3/dist/d3');
    
    
    // do something with d3 here
    const targetElem = d3.select('#target');
    
    targetElem.text('HELLO WORLD');
    

    【讨论】:

    • 因此它已经被转译意味着我不需要使用任何捆绑工具,我只使用 require?我已经尝试过了,并在终端中收到了此消息:未捕获的 ReferenceError:未定义要求。我还用第一段更新了我的问题,以更好地说明我捆绑库和使用 require 的动机。
    • 关闭,D3 包已经被转译成浏览器可以理解的格式。但是,您的带有require 语句的代码仍然需要通过browserify 进行转译。所以做你之前做的同样的事情,只需要d3/dist/d3 而不是d3。我希望这是有道理的!
    • 是的,我现在明白了。 :) 我是 JS 世界中的新手,我想问另一个问题:是否有另一种更优雅的方式来通过 npm 安装 D3,或者是否必须使用 require 和 bundle 工具?
    • 您可以使用<script> 标签。 <script src="node_modules/d3/dist/d3><script> 之类的东西,或者使用他们在入门页面上提供的 CDN。 <script src="https://d3js.org/d3.v7.min.js"></script>。但是,是的,如果你想使用requireimport,你需要一些东西来将它转换成浏览器可以理解的javascript。
    • 我会尝试您提供的所有选项并选择最适合我的选项。感谢您抽出宝贵的时间,这对您很有帮助。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-21
    • 1970-01-01
    • 1970-01-01
    • 2015-06-13
    • 2016-03-28
    • 2017-08-04
    • 1970-01-01
    相关资源
    最近更新 更多