在 babel
, webpack
已经成为必装 npm
包的今天,代码还没开始写就已经装了 200MB 的依赖,我真的感觉我电脑硬盘要
gg。所以很早就开始研究 npm 的共享问题。
├── Sites
│ ├── PROJECT_A
│ └── node_modules
│ ├── PROJECT_B
│ └── node_modules
│ └── PROJECT_C
│ └── node_modules
│ └── PROJECT_D
│ └── node_modules
└── Other
看着那海量且重复的 node_modules,真没什么好多说的。这当然是最稳妥的方案。不过我必须要做些优化。
之前我开发项目,喜欢把 node_modules 安装在 ~/Sites
(下文称
ROOT_DIR
) 下:
├── Sites
│ ├── node_modules
│ ├── PROJECT_A
│ ├── PROJECT_B
│ └── PROJECT_C
│ └── node_modules
│ └── PROJECT_D
└── Other
如果项目需要安装 npm 包,比如 eslint,我会 cd 到
ROOT_DIR
,然后 npm i -S eslint
,这样可以最大程度的实现 npm
包多项目共享。 新建项目时(下文称 PROJECT_DIR
),不再需要安装诸如
node-sass,webpack,eslint 之类的常用库了。如果PROJECT_DIR
真有需要调用特定的 npm 包,那就进入 PROJECT_DIR
下
npm i
即可。
一切看起来很完美,既有全局共享,又能局部调用,可是 PROJECT_DIR
的
package.json 里面记录的东西不全,多人开发的时候时常会搞得对方 clone 代码后,npm i
漏装某些库搞得项目 build 失败。
然后今天在 Häagen-Dazs 聊天的时候,我提到这个问题,L 说可以用 ln -s 软链的方式把
PROJECT_DIR/node_module 软连接到
ROOT_DIR/node_module
下。
这样在 PROJECT_DIR
里 npm i
的时候,即更新了
PROJECT_DIR/package.json,又更新了全局共享的
ROOT_DIR/node_module
,可谓真的两全其美。
不过我还没有实践,但已有担心的问题。假如 PROJECT_A
依赖了
jQuery1.x,PROJECT_B
依赖 jQuery3.x,然后
PROJECT
下已经有一个 ln -s 的
node_modules,不可能再建一个,这样的问题怎么解?
嗯,回头实践一下这个方法,再更新文章。
最后更新:2017-08-20 :->