概述
nvm是一个node版本管理工具,安装了nvm之后,可以通过nvm安装不同的node版本,随时切换。
nvm的实现机制说起来非常简单,就是对每个node版本建立了单独的文件夹,存放了不同的node.exe,要使用某个版本的node,就用一个超链接指向这个node文件夹,最后在环境变量里写入这个超链接。这样在命令行里运行node的时候,就会从NVM_SYMLINK环境变量里找到对应版本的node.exe。
这句话很简单,但是其实里面有个问题,如果你自己去试一试,就会发现这个NVM创建的这个超链接好像有点不太对劲,不是正常的右击——新建超链接,因为正常的超链接类型是快捷方式(.lnk),而nvm创建的快捷方式类型是文件夹。
所以这里我产生了一个疑问,一个文件夹是怎么做到同时还是超链接的???
我稍微研究了一下,发现 创建的超链接是symlinks,它是指向 单个文件或文件夹的符号链接,该链接看起来与Windows的文件或文件夹相同。
创建的symlinks的命令是:
mklink
详细的解释见:https://www.howtogeek.com/howto/16226/complete-guide-to-symbolic-links-symlinks-on-windows-or-linux/
于是我做了一个小实验,用于检测npm是否认可symlinks作为node_modules文件夹,具体步骤如下:
- 在某个文件夹下创建了 index.js,主要作用就是引用了一个需要install的npm包,用于检测包是否成功被引用。同时进行npm init,在package.json中写入依赖的包。
//index.js
{
"name": "learn_symlinks",
"version": "1.0.0",
"description": "Understand the working mechanism of symlinks.r 1. node mklink.jsr 2. npm installr 3. node index.jsr You'll see the symlinks of node_modules, and understande how it works.",
"main": "index.js",
"dependencies": {
"spark-md5": "^3.0.1"
},
"devDependencies": {},
"scripts": {
"test": "echo "Error: no test specified" && exit 1"
},
"repository": {
"type": "git",
"url": "git+https://github.com/Lynn93/learn_symlinks.git"
},
"keywords": [],
"author": "",
"license": "ISC",
"bugs": {
"url": "https://github.com/Lynn93/learn_symlinks/issues"
},
"homepage": "https://github.com/Lynn93/learn_symlinks#readme"
}
2. 创建了一个node_modules_win文件夹,同时创建了一个mklink.js,这个js可以创建一个名为node_modules的symlinks。
//mklink.js 用于创建symlinks
var exec = require("child_process").exec;
var cmd = 'mklink /D "D:work2020learn_symlinksnode_modules" "D:work2020learn_symlinksnode_modules_win"';
exec(cmd,{
maxBuffer: 1024 * 2000
}, function(err, stdout, stderr) {
//...
});
3. 执行 mklinks.js,成功创建symlinks
4. 执行 npm install,发现依赖包成功创建到 symlinks文件夹下
5. 运行 index.js,成功。
至此,可以证明npm不管是安装阶段还是运行阶段,都认可symlinks形态的node_modules。
完整代码见:https://github.com/Lynn93/learn_symlinks
因此,我可以借鉴nvm的机制,实现本地docker环境内外的node_modules快速切换。
最后
以上就是忧心西装为你收集整理的js写入文件到本地_nvm在windows下的实现机制 —— 既是文件夹又是超链接的symlinks...的全部内容,希望文章能够帮你解决js写入文件到本地_nvm在windows下的实现机制 —— 既是文件夹又是超链接的symlinks...所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复