—save-dev 开发时依赖 不会被打包到生产环境
—save 会被打包到生产环境中,即会出现在打包的bundle.js文件中

hash、chunkhash、contenthash的区别

  • hash:和整个项目的构建有关。只要项目文件有修改,整个项目构建的hash值就会更改;
  • chunkhash:和 webpack 打包的 chunk 有关。不同的entry 会生成不同的 chunkhash 值;
  • contenthash: 根据文件内容来定义 hash。文件内容不变,则 contenthash 不变。

详解
在我们给打包的文件进行命名的时候,会使用placeholder(占位符),placeholder中有一个属性比较相似:hash、chunkhash、contenthash。
1)hash
hash本身是通过MD4的散列函数处理后,生成一个128位的hash值(32个十六进制)。
hash值的生成是和整个项目的构建有关的。
举例说明
比如,我们现在有两个入口文件index.js 和 main.js;它们分别会输出到不同的bundle.js文件中,并且在文件名称中我们有使用hash。
这个时候,如果修改了index.js文件中的内容,那么hash会发生变化,即这两个文件的名称都会发生变化

总结:只要修改项目中的一个文件内容,那么这个项目中的所有文件的hash值都会发生变化(牵一发而动全身)

2)chunkhash
chunkhash可以有效地解决hash的问题,它会根据不同的入口生成不同的 chunkhash 值
举例说明
比如,我们修改了index.js文件,那么main.js中的chunkhash是不会发生变化的。

3)contenthash
contenthash根据文件内容来生成contenthash值。如果文件内容不变的话,则contenthash也不变。
举例说明
比如,我们的index.js文件中,引入了一个style.css文件。

  • 这个css文件在命名的时候,如果我们使用的是chunkhash,那么当index.js文件的内容发生变化的时候,css文件的命名也会发生变化;
  • 如果我们使用的是contenthash的话,当index.js文件的内容发生变化时,css文件的命名时不会变化的。

polyfill 和 shim 的区别