聊聊NPM那些事
哎呦喂~巧了啊!遇见即是缘分,关注一波呗,^-^
今天跟大家聊聊NPM,如有问题,欢迎大家评论指正,我会尽快做好更正,悦人阅己。
1.When(背景)
Node.js一经问世,瞬间席卷全球,大量开发者纷纷涌入秀技能,导致成百上千的库或框架涌现(学不动啊!!)。渐渐的发现库之间相互依赖,版本控制,管理起来很麻烦,于是有了NPM。通过该服务器,可以很快的找到要使用的包,并很容易进行下载、安装以及管理已经安装的包。
2.What(定义)
NPM(node package manager),通常称为node包管理器。它的主要功能就是管理node包,包括:安装、卸载、更新、查看、搜索、发布等。类似JAVA服务器开发中的MAVEN。
npm的背后,是基于couchdb的一个数据库,详细记录了每个包的信息,包括作者、版本、依赖、授权信息等。它的一个很重要的作用就是:将开发者从繁琐的包管理工作(版本、依赖等)中解放出来,更加专注于功能的开发。
3.Where(场景)
node上的开发使用该技术管理各个依赖包;
web端开发也使用该技术管理各个依赖包,现在主流的三大前端框架,React,Angular,Vue也都是通过npm进行依赖包管理;
配置脚本,执行如启动项目、打包等操作;
4.Why(优势)
无须像早期开发那样,手动下载各个依赖库文件,粘贴至项目中后手动一个个引入文件;更新时,再网上搜索查找最新版,下载替换;
更方便维护项目中的依赖库。package.json文件中,集中管理和呈现了所有的依赖库以及版本号。类似MAVEN项目的pom文件,管理所有的依赖jar包。
通过简单指令,即可轻松安装,升级,卸载所需模块包。如:npm install即可安装package.json中全部所需模块包。
可搭建NPM私服,用于维护和管理公司内部自建技术组件,规范内部开发技术栈,方便协同开发和项目维护。
正如作者所说,呃~,那个,还是不翻译了,原味更有味道:
npm makes it easy for JavaScript developers to share and reuse code, and it makes it easy to update the code that you’re sharing.
5.How(使用)
npm已集成至node.js中,安装node.js即可安装npm环境。主要罗列几个常用指令:
node版本升级
npm install -g n
n stable
npm版本升级
npm install -g npm
初始化
npm init
该指令会提示些基本信息,全部录入后,在项目中自动生成package.json文件,如果以有该文件,则可跳过该命令。
安装
npm install
该指令分为本地安装和全局安装
本地安装:package会被下载到当前项目所在目录,例如:
npm install <packageName>
该指令安装模块后,该模块指令只能在该目录下执行。其他目录下则提示找不到该指令。
全局安装:package会被下载到npm的全局模块的目录下,安装的package能够在所有目录下使用。
npm install <packageName> -g
该指令安装完后,则命令窗口任何目录都可以使用该模块指令。
安装包后,项目目录下会多出一个node_modules目录,该目录下为安装的所有的模块包。
npm install <packageName> -save
会在package.json文件的dependencies属性中添加一条记录;
npm install <packageName> -save -dev
会在package.json文件的devDependencies属性中添加一条记录;
卸载
npm uninstall <packageName>
更新
npm update <packageName>
它会先到远程仓库查询最新版本,然后查询本地版本。如果本地版本不存在,或者远程版本较新,就会安装。
查看安装
npm ls
可以查看当前目录安装了哪些package
npm ls -g
如果是要查看package的全局安装信息,加上 -g 就可以
运行脚本
npm 可以在项目package.json里面自定义脚本命令,在命令行中可以通过执行npm run 脚本名称来执行这段脚本,以下四个命令可以简写
npm start === npm run start
npm stop === npm run stop
npm test === npm run test
npm restart === npm run stop && npm run restart && npm run start
6.Deep
配置全局路径和缓存路径设置
由于C盘空间宝贵,但npm默认安装至C盘目录,故我们需要做下目录迁移,重装系统时,模块文件也能正常保留。
.npmrc位置: C:/Users/[username]/.npmrc
npm实际去找全局命令的目录:C:/Users/[username]/.npmrc 文件内容的prefix值
npm包全局cache目录:C:/Users/[username]/.npmrc 文件内容的cache值
故修改路径可以直接编辑.npmrc文件,添加prefix和cache的新的路径
prefix=D:\SoftDev\Conf\NodeJs\node_global
cache=D:\SoftDev\Conf\NodeJs\node_cache
亦可通过指令进行操作,进行修改配置
npm config set prefix "你想要的模块全局路径"
npm config set cache "你想要的缓存全局路径"
查看所有配置
npm config list
注:配置完,注意修改系统环境变量,将新的模块全局路径添加至path中,否则添加的模块指令无法全局使用。
package.json
定义了项目所需要的各种模块,以及项目的配置信息(比如名称、版本、许可证等元数据)。npm install命令根据这个配置文件,自动下载所需的模块,配置项目所需的运行和开发环境。
字段相当多,但最重要的的是下面几个
name: package的名字
version: package的版本,当package发生变化时,version也应该跟着一起变化
dependencies: package的应用依赖模块,即别人要使用这个package,至少需要安装哪些东东。
devDependencies:package的开发依赖模块,即别人要在这个package上进行开发
package版本
在package.json里,你经常会在包名后看到类似"~0.1.0"这样的字符串,这就是包的版本啦。下面会列举最常见的版本声明形式,以及版本书写的要求:
指定版本:比如1.2.2,遵循“大版本.次要版本.小版本”的格式规定,安装时只安装指定版本。
波浪号(tilde)+ 指定版本:比如~1.2.2,表示安装1.2.x的最新版本(不低于1.2.2),但是 不安装1.3.x,也就是说安装时不改变大版本号和次要版本号。
插入号(caret)+ 指定版本:比如ˆ1.2.2,表示安装1.x.x的最新版本(不低于1.2.2),但是不安装2.x.x,也就是说安装时不改变大版本号。需要注意的是,如果大版本号为0,则插入号的行为与波浪号相同,这是因为此时处于开发阶段,即使是次要版本号变动,也可能带来程序的不兼容。
latest:安装最新版本