Angular 2+ dist文件夹含唯一ID文件原因及生产更新部署问题咨询
Angular 开发相关问题解答
1. 为什么执行ng build命令生成的文件会带有唯一ID?
- 文件名中类似
82cxxxxxxxxxxxx1e58的串是内容哈希值,是Angular CLI默认在生产构建阶段,根据文件的实际内容计算生成的唯一标识,只要文件内容发生变化,对应的哈希值就会同步改变。 - 它的核心作用是解决浏览器静态资源缓存问题:
- 若文件内容无修改,哈希值不变,浏览器会直接复用本地缓存的文件,无需重新请求,可大幅提升站点加载性能
- 若文件内容修改后哈希值更新,浏览器会识别为新的资源文件,不会复用旧缓存,确保用户访问到最新的代码逻辑
- 你可以通过修改
angular.json配置文件中的outputHashing字段调整哈希生成规则,可选值包括all(所有资源都加哈希)、media(仅媒体资源加哈希)、bundles(仅js包加哈希)、none(关闭哈希)。
2. 仅修改组件的.ts或.html文件,是否只需上传main相关的js文件即可生效?
- 这个问题没有统一答案,取决于你的项目构建配置:
- 如果你的项目没有配置懒加载模块,所有业务代码都被打包到
main-es5.xxxx.js、main-es2015.xxxx.js两个bundle中,且修改的内容仅影响业务代码、没有改动第三方依赖、polyfill、构建配置等内容,确实只有这两个main相关的js文件哈希值会变化,只上传这两个文件即可生效。 - 但如果存在以下任意场景,就不能只上传这两个文件:
- 项目开启了懒加载,你修改的组件属于某个懒加载模块,改动的代码会被打包到对应懒加载模块的独立js bundle中,不会出现在main包内
- 修改的内容关联到公共代码逻辑,导致公共bundle(比如common、vendor等)的内容发生变化
- 本次构建调整了全局构建配置,导致多个bundle的内容或哈希规则变更
- 如果你的项目没有配置懒加载模块,所有业务代码都被打包到
- 更稳妥的处理方式是:每次构建后对比dist目录下所有文件的哈希值,仅上传哈希值发生变化的文件即可,无需全量上传整个dist文件夹,但不要默认仅上传main相关的两个文件,避免遗漏改动的资源导致线上异常。
内容的提问来源于stack exchange,提问作者VMK
相关产品推荐
相关产品推荐

