Uncaught ReferenceError: d3Scale is not defined / D3 V4 / rollup.js

Uncaught ReferenceError: d3Scale is not defined / D3 V4 / rollup.js

$ npm install d3-scale
$ npm install --save-dev rollup rollup-plugin-babel babel-preset-es2015-rollup

我创建了以下文件。

▼src/scripts/main.js

import   { scaleLinear }   from   "d3-scale" ;

我创建了以下文件。

▼rollup.config.js

// Rollup plugins
import babel from 'rollup-plugin-babel';

export default {
  entry: 'src/scripts/main.js',
  dest: 'build/js/main.min.js',
  format: 'iife',
  external: [ 'd3-scale' ],
  plugins: [
    babel({
      exclude: 'node_modules/**',
    }),
  ],
};

$ npm run build 

自动创建了以下文件

▼build/js/main.min.js

(function (d3Scale) {
'use strict';



}(d3Scale));

我创建了以下文件。

▼index.html

<script src="build/js/main.min.js"></script>

发生错误。为什么?

Uncaught ReferenceError: d3Scale is not defined

因为您已将 d3-scale 指定为外部模块,如果您的包作为 <script> 标记包含在内,那么它需要已经存在于页面上,并且 Rollup 需要知道相应的全局变量是(d3 — D3 有点不寻常,因为所有不同的包都附加到同一个命名空间)。

换句话说,你需要做这样的事情...

<script src="https://unpkg.com/d3"></script>
<script src="build/js/main.min.js"></script>

...并告诉 Rollup 关于 d3:

import babel from 'rollup-plugin-babel';

export default {
  entry: 'src/scripts/main.js',
  dest: 'build/js/main.min.js',
  format: 'iife',
  external: [ 'd3-scale' ],
  globals: { 'd3-scale: 'd3' }, // <--- note this line
  plugins: [
    babel({
      exclude: 'node_modules/**',
    }),
  ],
};

或者,要在您的包中包含 d3-scale 及其依赖项,请使用 rollup-plugin-node-resolve.