—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文件的命名时不会变化的。