让前端飞

npm模块安装目录测试

2019-03-27  本文已影响0人  gzgogo

某天有个开发者找到我,说安装我们提供的模块后,目录下找不到,调查了一下,当他在当前目录创建一个package.json文件后,可以看到模块被安装到当前目录,为了弄清楚其中规律,做了以下实验:

  1. 父子目录均无package.json,在子目录下执行nom i moment —savemoment安装在子目录下,并在子目录下生成node_modules以及package-lock.json文件,但不生成package.json
  2. 在子目录提前生成package.json,效果同一,模块被安装到子目录下
  3. 父目录包含node_modules目录或package.json文件,在子目录下执行安装,moment会被安装到父级目录下
  4. 无论父目录包含package.json文件还是node_modules目录,只要子目录下存在package.json文件或node_modules目录,子目录下执行安装,moment会被安装到子目录下。在父级目录安装时,也会在父级目录下安装该模块,即父子目录都会包含node_modules/moment

总结:

  1. 执行npm i xxx安装某个模块时,如果当前目录包含package.jsonnode_modules,则会将模块安装到当前目录,若不存在,会从当前目录开始,向父级目录依次查找,直到找到包含package.jsonnode_modules的目录,模块会被安装在该目录下。如果到根目录依然没有找到包含package.jsonnode_modules的目录,则当前模块会被安装到当前目录下。
  2. 当父子目录均包含node_modules目录或package.json文件时,安装相同模块(即使版本相同),会在父子目录下各安装一个

根据以上说明,可以猜测该开发者应该是当前目录下没有package.jsonnode_modules目录,但是某个父目录包含,所以安装我们的模块时,该模块被安装到了那个父级目录下,所以当前目录下找不到

上一篇 下一篇

猜你喜欢

热点阅读