创建软件包时,为什么必须在webpack配置中将peerDependencies列出为外部对象?

时间:2019-07-29 14:12:42

标签: javascript reactjs webpack node-modules

我正在使用create-react-app在React中创建一个npm包。由于reactreact-dom被假定在宿主项目中,因此我在package.json中将它们列为peerDependencies和devDependencies。

我了解到,这样仍然可以将两者捆绑在一起,并且为了避免不得不将它们列在我成功完成的webpack配置的外部:

externals: {        
  react: {          
      commonjs: 'react',          
      commonjs2: 'react',          
      amd: 'React',          
      root: 'React',      
  },      
  'react-dom': {          
      commonjs: 'react-dom',          
      commonjs2: 'react-dom',          
      amd: 'ReactDOM',          
      root: 'ReactDOM',      
  },  
},

我的问题是:为什么我必须经历第二步?将它们列为peerDependencies是否足够?如果没有,在这种情况下,peerDependencies与常规依赖有何不同?

1 个答案:

答案 0 :(得分:2)

npm可以理解对等依赖关系,webpack可以理解对外部依赖关系。两者含义相同,但是由完全不同的软件处理。

虽然运行npm install不会安装任何对等依赖项,但webpack仍会尝试遍历依赖关系树以尝试找到它们(如果代码中已引用它们)。将它们标记为外部显式告诉webpack显式忽略它们,即使已安装这些对等依赖项,也不要尝试遍历该依赖项分支。