webpack-stable-module-id-and-hash
webpack-stable-module-id-and-hash copied to clipboard
genModuleId函数中添加了去去版本号和query逻辑
genModuleId函数中添加了去去版本号和query逻辑
感谢 PR, 我认为不应该去掉 node_module 的相关路径,假设你的源码依赖 node_module 中的某个包,这个包后续升级或者改变路径都会影响你的「源码」,这个场景下,我认为不应该去掉 node_module 的相关路径。
你觉得呢?
EN: Thx ur PR
I dont think there should remove path about 'node_module' since that, suppose your biz source codes depend on some package in /node_module, whenever this package change its path or version,I think it should aspect your source code。For this situation, I dont think so.
How about yours?
说下我修改这段代码的意图:如果代码没有做改动,应该尽可能的让编译后的结果保持相同。但这个插件的moudule Id 是根据moudulePath生成的hash,因此只要路径有不同就会造成相同的代码编译出来的doule id 不一样,进而造成编译后的代码不一样。那那些因素会导致moudlePath不同呢?1. query。个别loader会允许通过指定文件的方式来对插件的功能做扩展或定制化,但如果配置不当这些扩展文件的路径可能会是绝对地址. 2. 版本号号,确实如你所说,有些情况下保留版本号是必要的,比如你确认依赖的了某个模块的文件。但还有一些情况则不一样,你依赖的只是一个loader,这些loader的不同版本编译出的结果可能是一样的,比如less。那么这种情况下保留版本号就没什么意义了。我觉得有两种可选的方案:
- 把两个功能作为一个可选的feature,可以通过配置来开启
- 始终启用这个功能,不同的版本通过锁版本之类的功能来解决
在我们项目内部,这两个问题都存在,而且这两两处引起错误的概率比造成问题的概率大的多,所以我提了这个PR。从另一个角度来讲,这个插件的功能是用来对引用的文件做编号的,决定这个编号的应该只和该文件位于项目中的位置有关系,至于版本、以及项目目录之外的一些因素应该没什么关系。就好比我的小区的行政分管单位变了或者我家装修了,但我的门牌号依然是有效的,快递员依然可以通过这个地址给我送快递。