使用d3命名汇总导出问题

时间:2019-07-18 08:46:31

标签: javascript d3.js rollup rollupjs es-module

我有一个正在使用d3的软件包。当然,在我的rollup.config.js文件中,我将d3声明为外部软件包和全局软件包:

let config = {
  ...,
  output: {
    external: ['d3'],
    globals: {d3:'d3'},
    ...,
  },
  ...
}

我可能在某个文件中有一个函数,例如:

import * as d3 from 'd3'
...

export function someFunc(arg1, arg2) {
  d3.select(arg1)
  d3.min(arg2)
}

...

当我将代码与rollup -c捆绑在一起时,我会得到一个很好的警告

src/modules/some-file.js
selection is not exported by node_modules/d3/dist/d3.node.js

所以我回到我的rollup.config.js文件并添加以下内容:

// inside config
plugins: [
  ...,
  commonjs({
    ...,
    namedExports: {
      'node_modules/d3/dist/d3.node.js': [
        'selection', 'min',
      ]
    },
    ...,
  })
  ...,
]

现在我的捆绑包没有警告或投诉...但是当我使用捆绑的代码时,会出现类似以下错误:

TypeError: d3_node_1 is null 
TypeError: d3_node_2 is null

在代码中我有d3_node_1的地方出现d3.select,在d3_node_2的地方出现d3.min

我该如何解决?

2 个答案:

答案 0 :(得分:1)

您可能必须使用rollup-plugin-node-resolve才能使用来自node_modules的第三方模块

答案 1 :(得分:0)

'module'添加到mainFields似乎可以解决

  nodeResolve({
      mainFields: [
        'module',
        'main', 'jsnext'
      ]
    }),