——
gentoo ~/code/nodejs $ npm install express --save
[email protected] node_modules/express
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected] ([email protected])
├── [email protected] ([email protected])
├── [email protected] ([email protected])
├── [email protected] ([email protected], [email protected], [email protected])
├── [email protected] ([email protected], [email protected])
├── [email protected] ([email protected], [email protected])
└── [email protected] ([email protected], [email protected])
测试 express-generator 的 子目录 : ~/code/nodejs/test
gentoo ~/code/nodejs $ mkdir test && cd test
gentoo ~/code/nodejs/test $ npm install express-generator --save
npm WARN prefer global [email protected] should be installed with -g
[email protected] ../node_modules/express-generator
├── [email protected]
├── [email protected]
└── [email protected] ([email protected])
express-generator 是安装在 nodejs 开发 主目录 下的 ~/code/nodejs/node_modules 目录:
gentoo /home/i/code/nodejs
$ tree -L 2 ~/code/nodejs/node_modules/
/home/i/code/nodejs/node_modules/
├── express
│ ├── History.md
│ ├── index.js
│ ├── lib
│ ├── LICENSE
│ ├── node_modules
│ ├── package.json
│ └── Readme.md
└── express-generator
├── bin
├── LICENSE
├── node_modules
├── package.json
├── README.md
└── templates
但发现在 主目录 和 子目录 下的 node_modules 都有安装 express
主目录 下的 express 目录树,比 子目录 多安装了 debug 包:
gentoo /home/i/code/nodejs
$ tree -L 2 node_modules/express
node_modules/express
├── History.md
├── index.js
├── lib
│ ├── application.js
│ ├── express.js
│ ├── middleware
│ ├── request.js
│ ├── response.js
│ ├── router
│ ├── utils.js
│ └── view.js
├── LICENSE
├── node_modules
│ ├── accepts
│ ├── content-disposition
│ ├── content-type
│ ├── cookie
│ ├── cookie-signature
│ ├── debug <--
│ ├── depd
│ ├── escape-html
│ ├── etag
│ ├── finalhandler
│ ├── fresh
│ ├── merge-descriptors
│ ├── methods
│ ├── on-finished
│ ├── parseurl
│ ├── path-to-regexp
│ ├── proxy-addr
│ ├── qs
│ ├── range-parser
│ ├── send
│ ├── serve-static
│ ├── type-is
│ ├── utils-merge
│ └── vary
├── package.json
└── Readme.md
28 directories, 11 files
gentoo /home/i/code/nodejs/test
$ tree -L 2 node_modules/express/
node_modules/express/
├── History.md
├── index.js
├── lib
│ ├── application.js
│ ├── express.js
│ ├── middleware
│ ├── request.js
│ ├── response.js
│ ├── router
│ ├── utils.js
│ └── view.js
├── LICENSE
├── node_modules
│ ├── accepts
│ ├── content-disposition
│ ├── content-type
│ ├── cookie
│ ├── cookie-signature
│ ├── depd
│ ├── escape-html
│ ├── etag
│ ├── finalhandler
│ ├── fresh
│ ├── merge-descriptors
│ ├── methods
│ ├── on-finished
│ ├── parseurl
│ ├── path-to-regexp
│ ├── proxy-addr
│ ├── qs
│ ├── range-parser
│ ├── send
│ ├── serve-static
│ ├── type-is
│ ├── utils-merge
│ └── vary
├── package.json
└── Readme.md
27 directories, 11 files
为什么 子目录 不能复用 主目录 的 express 还要重复安装呢?
——
1
qiu8310 2015-04-08 20:31:10 +08:00
目录树太多了,看的不是很明白,但我最近遇到类似问题:
如果模块 a 依赖于 b,c; 而模块 b 也依赖于 c; 当我在安装模块 b 的时候,c 模块就只会安装 1 次,并且是在 a 模块下。 看你好像是分两次安装,第二次安装的时候估计不会检查你当前目录的父目录是否已经安装了你要依赖的模块吧。 不知道这样理解对不对。 |
2
zhaoace 2015-04-09 13:49:19 +08:00
唔,这个树展开的话每个都是当前根节点的所有依赖。
为神马不能复用呢? 因为版本不一定一样啊。。。 每个项目的依赖内容都完整搞下来,这样文件夹会大一点,但是项目的path清晰了,里面的依赖版本独立了,整个项目的可移植性也变强了。 想象一下你把某个项目做完,整个项目folder撸走,换个地方还能run是不是有点小激动呢? |
3
lvii OP |
4
zhaoace 2015-04-10 08:40:27 +08:00
你应该这么理解这个问题。
无论是你的父目录还是子目录还是express还是express-generator都是独立的项目,而每个项目的自己的依赖都在自己的目录里,不会往上回溯的。 所以如果子目录里面用了express-generator,而express-generator自己有任何依赖的内容的话,要不然是从express-generator的目录下面查找,要不然就是去global path里面查找了,不会特地查看项目上游的path里面有没有相关内容的。 甚至说express-generator依赖了某个npm,他都不会关心你的子项目里有没有,只关心express-generator的目录下面以及global下面有没有。 :D |
5
zhaoace 2015-04-10 08:45:37 +08:00
再多嘴说一句吧,你的依赖打开的太浅了。 你仔细去看下依赖的依赖就看明白了。。。
悲伤的故事。。。 |