02 August 2014

需求

场景是这样子的:win 7系统E盘空间马上就要用完了,而驻扎在E盘里面的php进程仍然会往E盘里面写文件(工作目录在E盘某文件夹下),而F盘里面还有很大的空间。现在要满足这个PHP进程对硬盘空间更进一步的需求。

重新对硬盘分区这事风险太高,把程序停掉卸载重新安装到F盘也动静太大,尽量找到能不干扰正在运行的php进程的方案。

解决方案

如果是在linux系统中,建立一个文件夹软连接即可。对于php程序来说,数据目录仍然在工作目录下面(E盘),但是数据目录里面的文件物理上是存储在被链接的目录里面(F盘)。

linux/mac os系统创建软连接的命令是ln -s src dist

ln -s $NODE_PATH node_modules

现在问题是在windows系统上,用什么命令创建软连接呢?

我百度到的是mklink,创建文件夹软连接的命令语法是mklink /J dist src,确实能达到目标:

mklink junction window

windows的mklink命令的语法可以到cmd里面输入mklink执行,看提示,和linux的ln命令的src/dist参数顺序刚好相反:

mklink man

片花

这个技术细节在其他地方有没有应用意义呢?

上面的图片中已经透露了,node和grunt的node_modules目录。

node的非core的toplevel依赖是到当前路径及父目录的node_module文件夹里面搜索,或者是全局$NODE_PATH目录里面查找(看官方文档,还会到$HOME/.node_modules,$HOME/.node_libraries里面找)。

而grunt对node_module文件夹的要求更奇葩,必须在当前目录(运行grunt的目录)里面(grunt文档如是说:Each time grunt is run, it looks for a locally installed Grunt using node's require() system. )。

为了避免每次新check out 一个分支到本地运行grunt/node之前,就npm install一次,可以建立一个符号链接node_modules,链接到全局的$NODE_PATH目录,然后就可以执行grunt/node了。

实际上我们这边的前端上线系统就是这么干的,避免每次都去npm仓库下载依赖。



blog comments powered by Disqus