title: Node.js author: PanXiaoKang cover: https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=238001970,1745368623&fm=26&gp=0.jpg tags:

  • Node.js
  • npm categories:
  • 前端技术 date: 2021-01-03 19:16:00

# Node.js简介

Node.js 就是运行在服务端的 JavaScript。它让 JavaScript 成为与PHP、Python 等服务端语言平起平坐的脚本语言。Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。

# npm简介

npm 是javascript的包管理工具,是前端模块化下的一个标志性产物,当一个网站依赖的js代码越来越多,程序员发现这是一件很麻烦的事情,于是npm就出来了。这一点和maven、gradle十分相似,只不过maven、gradle是用来管理java jar包的,而npm是用来管理js包的。

简单地说,就是通过npm下载模块,复用已有的代码,提高工作效率。

  1. 从社区的角度:把针对某一特定问题的模块发布到npm的服务器上,供社区里的其他人下载和使用,同时自己也可以在社区里寻找特定的模块的资源,解决问题。
  2. 从团队的角度:有了npm这个包管理工具,复用团队既有的代码也变的更加地方便。

# Node.js和npm的发展

npm作者已经将npm开发完成,于是发邮件通知 jQuery、Bootstrap、Underscore 作者,希望他们把 jquery、bootstrap 、 underscore 放到npm远程仓库,但是没有收到回应,于是npm的发展遇到了瓶颈。 Node.js作者也将Node.js开发完成,但是 Node.js 缺少一个包管理器,于是他和 npm 的作者一拍即合、抱团取暖,最终 Node.js 内置了 npm。 后来的事情大家都知道,Node.js 火了。随着 Node.js 的火爆,大家开始用 npm 来共享 JS 代码了,于是 jQuery 作者也将 jQuery 发布到 npm 了。所以现在,你可以使用 npm install jquery 来下载 jQuery 代码。现在用 npm 来分享代码已经成了前端的标配。

# Node.js和npm的安装

Node.js的安装教程 (opens new window)直接上菜鸟教程有详细介绍。由于最新版的Node.js内置了npm,所以就一并安装了。有时候我们只想单独安装npm,不想安装Node.js,这个好像是不行的。

# npm 全局安装和局部安装的区别

# 安装命令

全局安装

npm install webpack -g 或 npm install webpack --global

本地安装

npm install webpack 或 npm install webpack --save-dev

# 安装位置

全局安装: 安装到全局环境里面,包安装在Node安装目录下的node_modules文件夹中,一般在 \Users\用户名\AppData\Roaming\ 目录下,可以使用npm root -g查看全局安装目录。

C:\Users\lenovo>npm root -g D:\Program Files\nodejs\node_global\node_modules

本地安装: 把安装包信息写入package.json文件的devDependencies字段中,包安装在指定项目的node_modules文件夹下。

# 调用方式

全局安装: 用户可以在命令行中直接运行该组件包支持的命令。

本地安装: 直接通过require()的方式引入项目中node_modules目录下的模块。

# 全局安装局限性

1.全局安装,不能直接通过require()的方式去引用模块

在js实例代码中,默认下node.js会在NODE_PATH和目前js所在项目下的node_modules文件夹下去寻找模块,全局安装需要手动解决包路径的配置问题,当然你也可以复制全局安装的node_modules文件夹到项目下,还有办法可以选择将环境变量的NODE_PATH设置为C:\Program Files\nodejs。

2.不利于包的更新管理

可能需要为每个包重新命名,如gulp@3.8.1、gulp@3.9.1...,为了区别不同项目使用指定的包,保证模块之间的相互依赖,区别每个项目正常运行。

# 本地安装的重要性

本地安装可以让每个项目拥有独立的包,不受全局包的影响,方便项目的移动、复制、打包等,保证不同版本包之间的相互依赖,这些优点是全局安装难以做到的。另外,本地安装包对于项目的加载会更快。缺点,如每次新项目都要本地安装所依赖的包,安装包时间相对较长。

# npm的使用

# 发布包

使用npm发布之前必须先进入npm官网 (opens new window)注册自己的账户。

  1. 本地创建自己需要发布的目录文件。执行npm init命令,生成package.json文件。
  2. 发布自己的npm包。命令如下:

第一次发布包:

  • 添加账号
npm adduser // 输入自己的npm账号、密码、邮箱

非第一次发布包:

  • 登录npm
npm login // 输入账号、密码、邮箱,登录后方可发包

注意:npm adduser成功的时候默认你已经登陆了,所以不需要再接着npm login.

  • 发布包
npm publish
  • 取消发布
npm unpublish [--force] // 不成功可以强制取消

# 查看发布的包信息

登录npm官网 (opens new window) ,即可看到刚才发布的包,如果网不是很好,可能等一会才能看到。

# 更新包

更新包和发布包的命令是一样的,更新包只需修改package.json里面的version字段,也可以使用npm 自带的版本控制命令修改版本号,更新的步骤为:

  1. 修改包的版本(package.json里的version字段)
  2. npm publish //发布
  3. npm version //查看版本信息

npm有一套自己的版本控制标准——Semantic versioning(语义化版本)

具体体现为:

对于"version":"x.y.z"

1. 修复bug,小改动,增加z

2. 增加了新特性,但仍能向后兼容,增加y

3. 有很大的改动,无法向后兼容,增加x

例如:初始的项目为1.0.0版本,相关变动如下:

若是1中情况,变为1.0.1

若是2中情况,变为1.1.0

若是3中情况,变为2.0.0

# 删除上传的包

**注意:**根据规范,只有在发包的24小时内才允许撤销发布的包

由于本人发布的包是测试包,不希望污染npm网站,所以在测试成功后需要删除包。

终端打开包项目,输入命令:

npm unpublish --force //实际上是执行撤销操作

删除后重新登录npm网站 (opens new window)上搜索这个包,发现已经不存在了。超过24小时已发布的包,一般不允许删除,若非要删除则可以通过邮件联系npm官网人员进行彻底删除。