Nodejs学习之npm
这是学习npm的学习笔记。
npm --> node package manager,也就是node的包管理工具(一个应用程序)。
教程
package
nodejs的包是基本遵循CommonJS规范,将一组相关的模块组合在一起,形成一个完整的工具。想c语言的头文件
作用
对node工具包搜索、安装、删除、上传。这样我们可以是用别人已经开发好的包更好的进行开发。其实和应用商城差不多。
在安装nodejs后就自动安装好了
常用命令
查看npm版本
npm -v
查看配置信息
npm config list #查看一部分
npm config ls -l #查看更加详细的配置信息
初始化
npm init # 快速创建包
npm init --yes # 更快速,直接全部默认,但是文件夹名称不能为中文和大写字母
创建完成后会在文件夹下多一个package.js
的文件
如何选择开源许可证? - 阮一峰的网络日志 (ruanyifeng.com)
package.json
这个文件是npm包的配置文件
{
"name": "npmlearn",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
下载过包之后会生成一个package-lock-json,锁定安装时的包的版本号,并且需要上传到git,以保证其他人在npm install时大家的依赖能保证一致。
搜索包
npm search xxx
npm s xxx #xxx 就是包名
这样搜索不好用,而且不好看。我们可以到它是在http://npmjs.org去搜索。
npm包的安装
npm install xxx
npm i xxx
npm i xxx@x.x.x 下载指定版本
# 都是一样的效果
它会自动安装在当前package.json
的node_modules
目录下。
安装并在package.json 中保存包的信息(dependencies 属性)
保存依赖,其实加不加save,下载的时候自动会加的(6版本之后)
这样做的目的是在于多人协作时的代码同步,在同步协作时,可以使用dependencies中的内容来安装相关的包。
npm install jquery --save
npm install jquery -S
# 效果是一样的
安装并在package.json 中保存包的信息(devDependencies 属性),这个是保存在开发依赖。
npm i xxx -D # 这里以下载label包为例(ES6转换为ES5)
依赖和开发依赖的区别
如果是在开发阶段使用的包,我们就是用devDependencies。比如webpack,这些只在开发中使用,一旦开发完毕,我们会借助打包工具,生成最终的结果。
而在项目运行中需要的依赖,我们就说它是dependencies(运行依赖),项目运行是必须的。
举个例子:
做饭需要很多工具和食材,完成料理之后,就不在需要锅等这个东西了,但是还需要食材和调料等。
在比如说label包,它是用来把ES6语法转换为ES5的,在转换完之后就不在需要了,也就说项目运行的时候是不需要的,那么label就是devDependencies.
像什么vue,react,jquery,bootstrap 这些都是dependencies
全局安装
npm install less -g
npm i less -g
全局安装的特性
- 不会影响当前项目的内容(对package.json没有任何影响)
- 在任意的命令行的位置都可以执行全局安装,不用到需要安装的目录位置
- 全局安装好的包,基本都是在命令行中使用,比如说安装了less,那么使用
lessc
把less文件变异成css文件。
全局安装一般用于安装全局工具,一般不用项目中特定引入(比如scrpit这些),比如cnpm,yarn,webpack,gulp等,其安装位置是C:\User\用户名\AppData\Roaming\npm
。使用npm root -g
可以看到安装位置。
建议修改到D盘具体修改的教程百度。
修改成功。
这里我们安装nodemon
,一个自动启动nodejs服务的代码,不用每次修改都要重启代码。
配置了环境变量中的path,就可以找到命令。
使用nodemon xxx.js
启动js代码,修改js代码时会自动重新运行js代码。
安装依赖
根据package.json
中的依赖声明,安装工具包
npm i
npm install
npm i --production # 只安装dependencies中的依赖
需要注意的是node_modules
目录是不能进入Git仓库的(太大了),它只是一个依赖,只需要将package,json
文件进入Git,后续下载即可。
移除包
npm remove xxx #xxx 是包名
多人协作时的注意点
需要注意的是node_modules
目录是不能进入Git仓库的(太大了),它只是一个依赖,只需要将package,json
文件进入Git,后续下载即可。
别人把这个拉下来只要做在package.json
稳重目录下运行npm i
即可下载所以的依赖文件。
所以一定要把.gitignore
给配置好。
npm的使用步骤
- 定位到一个文件夹下
- 初始化
npm init
npm i 包名
安装包,必须要有package.json文件夹下运行
下载的工具包会存放在node_modules
文件夹下。
npm包的使用
浏览器端
直接使用标签引用即可,比如
<script src='....'></script> <link rel='text/css' href='.....'>
在浏览器的脚本
使用require
引入即可。
require
会在当前路径查看,他就会向上向下都去查看看没有包。(百度)
const xx = require('包名');// 包名是在node_module下面的
全局工具的命令行使用
require
NPM 清除缓存
在npm下载失败时,可以试试清除缓存npm cache clean
NPM配置命令别名并执行
一般我们在运行nodejs代码时,都是使用的node xxx.js
,这样看来也是比较简单的,但是如果命令一旦长了起来,比如果webpack app.js --config -------------
这样一大堆的参数,那么就很不方便使用。所以我们可以在package.json
里面的script
的代码里面进行一些配置。
这里我们添加了一个"server"
属性,对应的就是运行代码的执行代码(路径是从存放的package.json
的路径是相同,如果是同级,那么肯定就可以直接运行了,如果不是,就要以存放package.js
的路径开始执行路径),在使用npm run server
即可运行。
对于路径不一致的情况来说,就要自己写好路径。
封装NPM包
创建自己的NPM包可以方便自己以后的使用。
-
如果换过源,需要换回官方的原地址。
npm config set registry https://registry.npmjs.org/
-
创建文件夹,并创建文件 index.js, 在文件中声明函数,使用 module.exports 暴露
-
npm 初始化工具包,package.json 填写包的信息
-
账号注册(激活账号),完成邮箱验证
-
命令行下 『npm login』 填写相关用户信息 (一定要在包的文件夹下运行)
-
命令行下『 npm publish』 提交包 👌
npm 有垃圾检测机制,如果名字简单或做测试提交,很可能会被拒绝提交
可以尝试改一下包的名称来解决这个问题
登录
发布包
下载自己上传的包,并测试成功
升级 NPM 包,需要修改 package.json 中的版本号修改,只需要执行『npm publish』就可以能提交
- 修改包代码
- 修改 package.json 中版本号
- npm publish 提交
删除发布的包
npm unpublish 包名 --force
CNPM
其实不是很推荐,还不如直接换源,或者使用机场。使用这个也好锁定版本号
cnpm是淘宝对国外npm服务器的一个完整的镜像版本,也是淘宝npm镜像,网址是http://npm.taobao.org/。
可以用此代替官方版本(只读),这是不可以上传的,所以在上传包之前如果修改过镜像地址,就必须修改为官方的,同步频率目前为 10分钟 一次以保证尽量与官方服务同步。
安装方式
使用
使用下载cnpm工具
npm install -g cnpm --registry=https://registry.npmmirror.com
配置完成后,就可以使用 cnpm 命令来管理包,使用方法跟 npm 一样,但是这个不加 -S 不会保存在dependencies中
cnpm install lodash # 这个不加 -S 不会保存在dependencies中
npm 配置镜像地址
//淘宝镜像
npm config set registry https://registry.npm.taobao.org
//官方镜像
npm config set registry https://registry.npmjs.org/
在发布工具的时候, 一定要将仓库地址, 修改为官方的地址
npm config list 来查看配置是否成功
yarn的使用
可以解决npm的一些缺点,比如包的版本控制,下载是并行的,更快。