Npm 是否可以使用webpack单独导入捆绑的webpack和库?

Npm 是否可以使用webpack单独导入捆绑的webpack和库?,npm,webpack,umd,Npm,Webpack,Umd,我试图构建一个使用d3的模块,但我不想将d3与该模块捆绑在一起,更重要的是,我不想将d3绑定到窗口。该模块将安装在另一个项目上,npm作为git依赖项。在模块上,我有如下设置: output: { path: path.resolve(__dirname, '../dist'), filename: '[name].min.js', libraryTarget: 'umd', umdNamedDefine: true }, externals: [

我试图构建一个使用d3的模块,但我不想将d3与该模块捆绑在一起,更重要的是,我不想将d3绑定到窗口。该模块将安装在另一个项目上,npm作为git依赖项。在模块上,我有如下设置:

output: {
    path: path.resolve(__dirname, '../dist'),
    filename: '[name].min.js',
    libraryTarget: 'umd',
    umdNamedDefine: true
  },
  externals: [
    {
      "d3": {
        root: "d3"
      }
    }
  ]
import d3 from 'd3'
import example from 'example'
在项目中,它安装在我想要的东西如下:

output: {
    path: path.resolve(__dirname, '../dist'),
    filename: '[name].min.js',
    libraryTarget: 'umd',
    umdNamedDefine: true
  },
  externals: [
    {
      "d3": {
        root: "d3"
      }
    }
  ]
import d3 from 'd3'
import example from 'example'
但是,只有在我也这样做的情况下,这才有效:

import d3 from 'd3'
window.d3=d3
import example from 'example'
是否可以在不接触全局范围的情况下使用这两个模块

试试改变

  externals: [
    {
      "d3": {
        root: "d3"
      }
    }
  ]


。通过设置为
root
,库应作为全局变量可用

,因为这两个模块分别存在,它们各自有自己的闭包。共享第三个依赖项的唯一地方是两者之外的范围,传统上是全局范围。 您可以练习依赖注入

因此,与其

module.exports = function do_a_thing() {
  // use d3 here
}
是吗

module.exports = function do_a_thing_generator(d3) {
  return function do_a_thing() {
    // use d3 here
  }
}
然后,最终

import d3 from 'd3'
import exampleInit from 'example'

const example = exampleInit(d3)