簡體   English   中英

ES6導出腳本

[英]ES6 export of a script

我在React中使用D3 v5,並且具有使用v3的可視化效果。 我正在為v5使用npm模塊,但對於v3,我正在嘗試導入D3以在該可視化中使用。

在我的組件中,我有:

import * as d3 from './lib/d3/v3/d3';

在d3文件夾的d3.js中,縮小的v3 d3腳本:

const d3 = !function(){function n(n){return n&&(n.ownerDocument||n....

export default d3;

但是我收到以下錯誤:

編譯失敗。

./src/components/d3/NetworkTopology/D3_NetworkTopology.js
Attempted import error: 'behavior' is not exported from './lib/d3/v3/d3' (imported as 'd3').

NetworkTopology.js:

  ...
  const zoom = d3.behavior
    .zoom()

在v4中刪除了“行為”,因此在我看來,這是在拉D3 V5版本而不是V3。 如何設置為同時使用兩個版本的D3?

我將導入更改為:

import d3 from './lib/d3/v3/d3';

但是出現了以下編譯錯誤:編譯失敗。

./src/components/d3/NetworkTopology/lib/d3/v3/d3.js

  Line 1:   Expected an assignment or function call and instead saw an expression  no-unused-expressions

並且我import * as d3 from './lib/d3/v3/d3';得到與import * as d3 from './lib/d3/v3/d3';相同的錯誤import * as d3 from './lib/d3/v3/d3'; 結合刪除const並在d3.js中導出(只需使用原始的縮小文件即可)。

我認為這與d3的版本無關。 您的問題是帶有最小化庫的腳本具有單個export default d3 (名稱default綁定到具有d3值的常量的導出),而您的組件將名稱空間import * as d3 ,這意味着d3將是包含所有導出的模塊對象-在您的情況下,僅default 因此d3.default.behaviour可以工作。 但是,您應該更改導入,以不使用名稱空間對象,而是直接導入單個值:

import d3 from './lib/d3/v3/d3';
// which is short for
import { default as d3 } from './lib/d3/v3/d3';

你應該更新

    import d3 from './lib/d3/v3/d3';

盡管先前的答案使我可以使用以下方法解決問題頂部的原始錯誤:

從'./lib/d3/v3/d3導入d3

,最終導致出現ES-Lint錯誤,我通過添加來解決了該錯誤

/ *禁用eslint * /

但是,然后我得到了一個錯誤,這是由於Babel在D3縮小代碼上插入“ use strict”而引起的。 由於Create React App不允許在不彈出應用程序的情況下修改Babel配置,因此我陷入了困境。 我曾考慮過在模板中放入腳本或通過AJAX調用從CDN中獲取D3腳本,但是我不確定它是否可以在同一應用程序中與兩個D3版本一起使用。

最終有效的方法如下。 我將早期版本的D3克隆到了應用程序根目錄下的目錄中,然后將其package.json中的名稱修改為“ d3-v3”,並將目錄重命名為“ d3-v3”。 范圍內的npm軟件包命名可能是軟件包名稱的首選。

然后我做了一個:

npm install file:./d3-v3

在我的React組件中,我將以下內容用於D3 v3

import * as d3 from 'd3-v3';

對於使用的v5:

import * as d3 from 'd3';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM