小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
前言
在上一篇文章善其事,利其器(一)——win下的choco中,我讨论了如何在windows环境下用choco管理常见的环境,例如git、nodejs和python等等。
但是对于前端开发人员而言,node和python各自之间是存在版本差异的,如果工程中没有对版本差异性做特殊处理,那么我们的直观感受就是:这个工程跑不起来。但是我们又不可能针对工程去频繁删除原有版本,再安装工程需要的版本环境。
有些人会在环境变量中,针对python2和python3给两个不同的路径,然后通过命令区分。但是实际上这也存在一些问题:
- 首先大版本中的不同小版本也存在差异性
- 其次环境的版本差异不仅仅意味着本次工程的依赖版本具有差异性,实则是大版本下的整个生态都具有差异,例如基于
python2和基于python3的开发依赖库肯定是不兼容的
所以通过本文我主要介绍如何使用工具来管理工程的依赖环境。
NodeJs版本管理
前端开发对NodeJs和npm肯定都不陌生,并且对于开发环境依赖的不同版本的node肯定很头疼,下面介绍两个可以管理node的工具。
nvm
nvm分为nvm和nvm-windows,针对不同的操作系统需要下不同的软件。
mac和linux中使用nvm,使用如下命令行安装:
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
或者
$ wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
安装后查看nvm版本验证是否成功:
$ nvm --version
安装最新版本的node:
$ nvm install node
或者需要版本的node:
$ nvm install 14.7.0
切换成对应版本的node:
$ nvm use 16
windows下使用nvm-windows,这个根据官方教程图形化安装就好。
ps:有些教程里涉及需要删除系统中现有的node,我尝试了下新版本的nvm-windows现在查找到现有的node时会询问是否加入管理,选是即可。
n
说一下n,它和nvm最大的不同是,nvm是脱离node以及npm独立存在的,而n是通过npm来管理的,本质是全局的一个模块。
使用npm安装全局的n:
$ npm install -g n
安装不同版本的node:
$ n 10.16.0
$ n lts
直接使用n来切换版本:
$ n
node/4.9.1
ο node/8.11.3
node/10.15.0
使用n的好处是,可以用npm来管理n,然后n管理node,形成一个环。坏处也是由于n由于是个模块,所以n命令相较于nvm要局限很多。
tips:使用n并且环境中做android开发的人员,可能会遇到n命令冲突的问题,这里我推荐前端开发人员如果同时要移动端开发,使用nvm来管理node。
python版本管理
一个经典的问题:“我们是前端开发,为什么要管理python的环境呢?”,主要原因是:
- 工程没有用到,但是依赖环境可能用到(经典的
node-sass) - 开一个
jupyter notebook用python处理一些数据效率很高(脚本小子狂喜) 相信很多人对使用了node-sass的项目,下面这个报错并不陌生:
gyp ERR! stack Error: Command failed: D:\Python\python.EXE -c import sys; print "%s.%s.%s" % sys.version_info[:3];
gyp ERR! stack File "<string>", line 1
gyp ERR! stack import sys; print "%s.%s.%s" % sys.version_info[:3];
gyp ERR! stack ^
这个问题就是依赖库使用了python2的语法,但是系统环境是python3导致的。最直接的方法是:自己的项目就使用dart-sass来解决问题。
但是有些并不是自己的项目,那么就需要用下面的版本管理来切换版本。
anaconda
anaconda和miniconda最终都是使用conda指令来管理python的环境。所不同的是,anaconda有图形化、会帮你下好数学计算所需要的一堆包。简单来说就是傻瓜式一键安装,之后用jupyter notebook写代码也很方便。但是体积更大,安装时间更长,如果仅仅是需要切换python版本,可以使用miniconda。
安装anaconda就根据官网链接一步步安装就好了,安装完成后会发现命令行前带有了(base)字样,即现在已经激活了base环境,以后敲击的命令都是在该环境下运行的。
可以通过以下命令列出所有环境:
$ conda env list
通过create创建新环境:
$ conda create -n your_env_name python=x.x
例如:
$ conda create -n python27 python=2.7
激活对应的环境:
$ activate your_env_name
你会发现命令行前会带有(your_env_name)字样,像上文中提到的node-sass的问题,就可以使用下列命令行来解决:
$ activate python27
$ npm i
miniconda
miniconda是在开发人员比较了解python和conda的情况下使用的,占用体积小,但是用到依赖库需要自己去下,使用方法同anaconda一样。