详讲npm !
可能好多人一直在用npm ,却分不清npm到底干嘛的,每次装node时就自动把npm 装好了,那么它们到底什么关系呢 ?
别人问npm干嘛的,可能很模糊的回答一句用来装包的,那除了装一些包还有没有别的用处呢?
我这里为了让不懂npm的看懂写的很啰嗦,哈哈大佬可以选择性看
npm干嘛的 :
帮助你安装模块(包),自动安装依赖(是指假如你安装了jquery这个包,它会帮你自动安装好jquery中所依赖的其他包),管理包(增,删,更新,项目所有包),只是用来管理项目里所依赖的第三方包,并没有帮你管理项目,除了安装第三方包以外还可以帮你管理包和执行脚本。可以从npm服务器上下载别人编写的脚本和第三方库到自己本地去使用,当然你也可以把自己写的包到npm服务器上分享给别人用。
npm和node什么关系:
npm使用js写的被放到node环境上运行,其实也就是node内置了npm, npm是node官方提供的包管理工具。
npm安装包
全局安装:就是意味着,任何盘符,任何目录下都可以调到这个包,假如~这个包不管在vue,react,还是小程序等等项目里都需要用到这个包,就可以考虑把这个包装到全局。
npm install 包名 -g (--golbal缩写)
或者这样
npm i 包名 -g
卸载全局包
npm uninstall 包名 -g
本地安装:本地装也就是安装项目里,包是跟着项目走的,本地安装是为了方便项目迁移,只能在当前项目目录里使用。
npm i 包名 =npm install 包名
卸载本地包
npm uninstall 包名
注意:全局和本地装的包是不互通的,如果你在命令行直接敲包名跑的是全局装的包,项目环境下的包只能借助代运行工具运行。如(npm npx)
简单说 :一般装在全局的包都是工具类的包(如放在自己电脑用来测试,练习学习的),装本地的包为了项目迁移。
npm 管理包:
生成package.json文件:命令npm init 用来初始化生成一个package.json文件,是用来管理第三方包的一个配置文件。并会记录安装的所有依赖包的包名(也可以手动创建一个package.json文件)
package.json文件里有一堆json ,这些json将要配置的是,当你下一次直接使用命令npm install 时,就会自动去找package.json文件里所有依赖的包并安装(默认安装dependenciel和devDependencies的所有包 )。同时在文件目录里生成一个node_modules文件。(所有的依赖的包都会放到这里)
因此 只需把package.json文件配置好,当别人去拿到你的项目包时只需用npm install就能拿到项目所有的依赖,所以node_moudules不需要跟着项目迁移,只需把package.json配置好带走就行。
注意:当node_modules有一些包了,在去npm install 时安装包重复时,npm 会自行帮解决重复的包。会自行进行版本对比。
npm init
生成文件如图加注释
{
"name": "npm", 项目名称
"version": "0.0.1", 版本
"description": "test and play", 描述
"main": "index.js", 入口文件
"dependencies": { 项目依赖 上线仍然需要
"jquery": "^3.2.1"
},
"devDependencies": { 开发依赖 上线不需要
"animate.css": "^3.5.2"
},
"scripts": { 命令行
"test": "命令行" 通过npm跑一些脚本帮你代运行=npm run test
"haha": "命令行" 比如可以改为haha代运行=npm run haha
},
"repository": { 仓库信息
"type": "git",
"url": "git+https://github.com/xxx.github.io/xxx"
},
"keywords": [ //关键词
"test",'xx','oo'
],
"author": "xxx",
"license": "ISC", 认证
"bugs": {
"url": "https://github.com/xxx.github.io/xxx"
},
"homepage": "https://github.com/xxx.github.io/xxx"
}
注意:项目名称name不能与npm官网上的包名一致。(如项目名不能为jquery包名等)
可直接修改项目名称name字段。(如 name:“haha”)
项目名不一定要与项目目录名一样,但是将来下载这个包时,是以项目名称为准的。
项目环境(dependencies):在当前项目下使用,上线了,到了生产上,仍然需要这个依赖。
举个梨子~ 一个项目用了jquery 依赖,上了生产上用户使用触发dom需要调到jquery此时jquery属于项目依赖,就要装到项目依赖里。
安装到项目依赖:
npm install 包名 --save
简写
npm install 包名 -S
开发依赖(devDependencies):只能在当前项目下使用,上线了,到了生产上,就不需要使用此依赖了。
举个梨子~在项目里安装一个gulp,gulp只是用来在所开发好的代码打个包而已,打完包就不需要它了,只是在开发环境使用而已,生产并不会用到,这像这种属于开发依赖,就装到开发依赖里。
简单说 开发依赖和项目依赖区别:开发依赖生产不需要,项目这依赖生产仍需要。
安装到开发依赖:
npm install 包名 --save-dev
简写:
npm install 包名 -D
注意~
执行 npm install jqery -S
会发现同时也生成了一个package-lock.json的文件,那么这个文件又是干嘛的呢
是代表一个锁,这个锁记录所有安装的日志。
注意~
可能有些人会问,在vue,react 等框架开发时,安装到项目依赖或者开发依赖并没有很大的区别呢,或者一部分人也没有注意过这个,那为什么没问题呢
因为可能在打包时用了第三方项目管理工具, 项目管理工具在打包时到生产环境上,其实是有开发环境devDependencies字段里的依赖包的 。
在没有第三方管理工具介入时就有区别了。开发依赖是上不了生产环境的。
npm 常用必备命令:
npm list/ls 列出所有已装包
npm outdated 版本对比(安装过得包)
npm info 包名 查看当前包概要信息
npm view 包名 versions 查看包历史版本列表
把包发布到npm服务器:
注册账号:npmjs.com
登录:npm login
输入:user/password/email
创建包目录->npm init -y -> 创建入口index.js -> 编写,输出-> npm publish发布
发布:npm publish 发布一定要在当前包的目录下执行命令。每次发布递增一个版本号
删除:npm unpublish
注意:每次只能卸载一个版本
npm规范:会保留最低的一个版本。
讲讲nrm:
nrm:是用来帮npm切换源的。(选择源的工具包)
安装nrm
npm install nrm -g
比如把npm的源指向taobao(切换源)
nrm use taobao
执行命令 nrm ls 列出所有的境像(仓库)
如图:
可以看出当前使用的是taobao境像。
nrm测试所有源:
nrm test
注意
如果你要上传npm包到官网上模块时 还需要切换到npm才能发布包。
原创不易~~希望对有帮助到理解npm的友友给个支持~给个关注。。。给个赞哦。。三克油。。
有不同理解和理多的意见的欢迎指。。。共同进步。。。。
------努力努力再努力。
`